Couchbase基本存储桶N1QL查询NodeJS脚本未返回任何值

时间:2018-05-29 01:54:09

标签: node.js couchbase

我直接从他们的文档中获得了一个基本的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入门脚本无效吗?

1 个答案:

答案 0 :(得分:0)

键/值读写始终是一致的(也就是说,如果你编写一个文档,然后通过ID检索它,你将总是得到你刚写的内容)。但是,更新N1QL查询的索引需要时间并且可能会影响性能。

从5.0版开始,您可以控制一致性要求,以平衡性能和一致性之间的权衡。默认情况下,Couchbase使用Not_bounded模式。在此模式下,查询立即执行,无需等待索引进行追赶。这会导致您看到的问题。在使用您所做的突变更新索引之前,您的查询正在执行。

您可以在此处进一步了解:https://developer.couchbase.com/documentation/server/current/indexes/performance-consistency.html