我直接从他们的文档中获得了一个基本的NodeJS Couchbase脚本。它只是插入一个文档,并立即N1QL查询插入的文档。
var couchbase = require('couchbase')
var cluster = new couchbase.Cluster('couchbase://localhost/');
cluster.authenticate('admin', 'admini');
var bucket = cluster.openBucket('application');
var N1qlQuery = couchbase.N1qlQuery;
bucket.manager().createPrimaryIndex(function() {
bucket.upsert('user:king_arthur', {
'email': 'kingarthur@couchbase.com', 'interests': ['Holy Grail',
'African Swallows']
},
function (err, result) {
bucket.get('user:king_arthur', function (err, result) {
console.log('Got result: %j', result.value);
bucket.query(
N1qlQuery.fromString('SELECT * FROM application WHERE $1 in
interests LIMIT 1'),
['African Swallows'],
function (err, rows) {
console.log("Got rows: %j", rows);
});
});
});
});
这回来了
bash-3.2$ node nodejsTest.js Got result:
{"email":"kingarthur@couchbase.com","interests":["Holy
Grail","African Swallows"]}
Got rows: []
我期待插入的文档在“rows”数组中。
知道为什么这个非常基本的nodeJS入门脚本无效吗?
答案 0 :(得分:0)
键/值读写始终是一致的(也就是说,如果你编写一个文档,然后通过ID检索它,你将总是得到你刚写的内容)。但是,更新N1QL查询的索引需要时间并且可能会影响性能。
从5.0版开始,您可以控制一致性要求,以平衡性能和一致性之间的权衡。默认情况下,Couchbase使用Not_bounded
模式。在此模式下,查询立即执行,无需等待索引进行追赶。这会导致您看到的问题。在使用您所做的突变更新索引之前,您的查询正在执行。
您可以在此处进一步了解:https://developer.couchbase.com/documentation/server/current/indexes/performance-consistency.html