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);
});
});
我有一个以 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);
});
});