Couchbase 和 nodejs:查看具有范围、顺序和有限结果的查询
Couchbase & nodejs: View query with range, order and limited results
我是 couchbase 的新手,我正在尝试了解视图中的过滤、排序和限制结果如何协同工作。
Couchbase version: 3.0.1
我正在使用 nodejs 作为 SDK。
我有这样的地图功能
function (doc, meta) {
if (doc.type !== 'item' || !doc.category) {
return;
}
emit([doc.orderId, doc.category.id, doc.number], null);
}
还有一个看起来像这样的项目文档
{
"id": 1,
"type": "item",
"number": 1203,
"orderId": 2,
"category": {
"id": 10,
"title": "Carpet"
}
}
我只想过滤 orderId = 2 和 category.id = 10 的项目,所有这些都按 数字降序。因为我有分页器,所以我想每页显示 20 个项目。我在数据库中有数千个项目。
对于下面的查询,由于订单调用,我遇到了错误。如果我评论它,我会找到结果,默认按数字升序过滤、限制和排序。
var order_id = 2,
category_id = 10,
limit = 20,
skip = 0,
range = [order_id, category_id],
// suppose we have a valid couchbase connexion and a viewQuery object
query = viewQuery.from('items', 'myView')
.limit(limit)
.skip(skip)
.order(2) // 2 = DESC. This line doesn't work
.include_docs(true)
.range(range, range.concat([{}]), true);
bucket.query(query, function (err, docs) {
console.log(err);
console.log(docs);
});
错误说:
Error: query_parse_error: No rows can match your key range, reverse your start_key and end_key or set descending=false
请注意,如果我订购 ASC,也会出现错误。我必须删除对 .order() 函数的调用才能使我的视图正常运行。
有谁知道为什么?
谢谢
当您按降序排列查询时,您还必须交换开始键和结束键的顺序(range
方法的参数。)
我是 couchbase 的新手,我正在尝试了解视图中的过滤、排序和限制结果如何协同工作。
Couchbase version: 3.0.1
我正在使用 nodejs 作为 SDK。
我有这样的地图功能
function (doc, meta) {
if (doc.type !== 'item' || !doc.category) {
return;
}
emit([doc.orderId, doc.category.id, doc.number], null);
}
还有一个看起来像这样的项目文档
{
"id": 1,
"type": "item",
"number": 1203,
"orderId": 2,
"category": {
"id": 10,
"title": "Carpet"
}
}
我只想过滤 orderId = 2 和 category.id = 10 的项目,所有这些都按 数字降序。因为我有分页器,所以我想每页显示 20 个项目。我在数据库中有数千个项目。
对于下面的查询,由于订单调用,我遇到了错误。如果我评论它,我会找到结果,默认按数字升序过滤、限制和排序。
var order_id = 2,
category_id = 10,
limit = 20,
skip = 0,
range = [order_id, category_id],
// suppose we have a valid couchbase connexion and a viewQuery object
query = viewQuery.from('items', 'myView')
.limit(limit)
.skip(skip)
.order(2) // 2 = DESC. This line doesn't work
.include_docs(true)
.range(range, range.concat([{}]), true);
bucket.query(query, function (err, docs) {
console.log(err);
console.log(docs);
});
错误说:
Error: query_parse_error: No rows can match your key range, reverse your start_key and end_key or set descending=false
请注意,如果我订购 ASC,也会出现错误。我必须删除对 .order() 函数的调用才能使我的视图正常运行。
有谁知道为什么? 谢谢
当您按降序排列查询时,您还必须交换开始键和结束键的顺序(range
方法的参数。)