Couchbase ViewQuery 数组范围不起作用(node.js sdk)

Couchbase ViewQuery array range doesn't work (node.js sdk)

我有一个以 couchbase 作为数据库的 express 应用程序,并且有一个像这样的 express 路由器:

router.get('/:key', function(req, res, next){
  var champId = req.params.key;
  var startKey = [champId, 0, false];
  var endKey = [champId, 100000, true];
  var input = {
    'bucket' : dbbucket,
    'document' : dbdocument,
    'view' : dbview,
    'viewStartKey' : startKey,
    'viewEndKey' : endKey,
    'inclusiveEnd' : true,
    'groupLevel' : 3
  };

  dbconnect.dbQuery(input, function(dbError){
    res.status(500).send('Could not retrieve the requested data');
  }, function(results) {
    res.status(200).send(results);
  });
});

router.get('/', function(req, res, next){
  var input = {
    'bucket' : dbbucket,
    'document' : dbdocument,
    'view' : dbview,
    'groupLevel' : 3
  };

  dbconnect.dbQuery(input, function(dbError){
    res.status(500).send('Could not retrieve the requested data');
  }, function(results) {
    res.status(200).send(results);
  });
});

我的 dbQuery 方法是:

function queryExecuter (input, error, callback){
  var constructedQuery = queryConstructor(input.document, input.view);
  if(input.viewKey){
    constructedQuery = constructedQuery.key(input.viewKey);
  }
  if(input.viewStartKey && input.viewEndKey && input.inclusiveEnd){
    constructedQuery = constructedQuery.range(input.viewStartKey, input.viewEndKey, input.inclusiveEnd);
  }
  if(input.groupLevel){
    constructedQuery = constructedQuery.group_level(input.groupLevel);
  }
  input.bucket.query(constructedQuery, function(dbError, results) {
    if(dbError) {
      error(dbError);
      return;
    }
    callback(results);
  });
}

当我尝试 运行 没有 startKey 和 endKey 时,数据 returns 很好但是当我 运行 有 startKey 和 endKey 时,我得到一个空数组作为响应(我应该得到 159 条记录,因为这是我在 运行 没有 startKey 和 endKey 时获得的数据量,当我从 couchbase 控制台使用相同的 startKey 和 endKey 查询存储桶时,这就是我得到的)。我使用的是 nodejs 4.2.1 版和 couchbase 4.1.0 版。我还尝试使用 startKey.toString() 和 endKey.toString()。结果还是一样。

事实证明,当我点击 /:key 路由时,我生成的 startKey 和 endKey 将是 [ '1', 0, false] 和 [ '1', 10000, true] 而不是 [ 1, 0, 假] 和 [ 1, 10000, 真]。

所有尝试使用此类路由的人请注意:始终使用 parseInt(req.params.key)。

工作代码:

router.get('/:key', function(req, res, next){
  var champId = req.params.key;
  var champIdInt = parseInt(champId);
  var startKey = [champIdInt, 0, false];
  var endKey = [champIdInt, 100000, true];
  var input = {
    'bucket' : dbbucket,
    'document' : dbdocument,
    'view' : dbview,
    'viewStartKey' : startKey,
    'viewEndKey' : endKey,
    'inclusiveEnd' : true,
    'groupLevel' : 3
  };

  dbconnect.dbQuery(input, function(dbError){
    res.status(500).send('Could not retrieve the requested data');
  }, function(results) {
    res.status(200).send(results);
  });
});