Node.js Couchbase&;nodejs:查看范围、顺序和有限结果的查询

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); } {

我是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);
}
{
    "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()函数的调用才能使视图正常工作

有人知道为什么吗?
谢谢

当您按降序排列查询时,您还必须交换开始键和结束键的顺序(将参数转换为
范围
方法)。

经过一些重构和重试,它终于起作用了!交换确实是要做的事情,谢谢!