我是 couchbase 的新手,我正在尝试了解 View 中的过滤、排序和限制结果如何协同工作。
Couchbase version: 3.0.1
我使用 nodejs 作为 SDK。
我有这样的 map 功能
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() 函数的调用才能让我的 View 正常运行。
有人知道为什么吗? 谢谢
最佳答案
当您按降序排列查询时,您还必须交换开始键和结束键的顺序(range
方法的参数。)
关于node.js - Couchbase 和 nodejs : View query with range, 顺序和有限的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946742/