Couchbase&nodejs:使用范围,顺序和有限的结果查看查询
我是couchbase的新手,我想了解如何在视图中筛选,sorting和限制结果一起工作。
Couchbase版本:3.0.1
我正在使用nodejs作为SDK。
我有这样的地图function
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个条目。 我有数以千计的项目在数据库中。
在下面的查询中,由于订单调用,我有一个错误。 如果我发表评论,我发现结果,过滤,限制和默认情况下按数字升序sorting。
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); });
错误说:
错误:query_parse_error:没有行可以匹配您的键范围,反转您的start_key和end_key或设置降序=假
请注意,如果我订购ASC ,也会发生错误。 我必须删除对.order()函数的调用才能让我的视图正常工作。
有谁知道为什么? 谢谢
如果您按降序排列查询,则必须将开始和结束键的顺序(parameter passing给range
方法)交换。