Node.js Couchbase&;nodejs:查看范围、顺序和有限结果的查询
我是couchbase的新手,我正试图了解过滤、排序和限制视图中的结果是如何协同工作的 Couchbase版本:3.0.1 我使用nodejs作为SDK 我有一个像这样的映射函数Node.js Couchbase&;nodejs:查看范围、顺序和有限结果的查询,node.js,couchbase,Node.js,Couchbase,我是couchbase的新手,我正试图了解过滤、排序和限制视图中的结果是如何协同工作的 Couchbase版本:3.0.1 我使用nodejs作为SDK 我有一个像这样的映射函数 function (doc, meta) { if (doc.type !== 'item' || !doc.category) { return; } emit([doc.orderId, doc.category.id, doc.number], null); } {
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"
}
}
以及一个如下所示的项目文档
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);
});
错误显示:
错误:查询\解析\错误:没有行可以匹配您的键范围,请反转开始\键和结束\键或设置descending=false
请注意,如果我订购ASC,也会发生错误。我必须删除对.order()函数的调用才能使视图正常工作
有人知道为什么吗?
谢谢当您按降序排列查询时,您还必须交换开始键和结束键的顺序(将参数转换为
范围
方法)。经过一些重构和重试,它终于起作用了!交换确实是要做的事情,谢谢!