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 = 2category.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方法)交换。