Couchbase 和 nodejs:查看具有范围、顺序和有限结果的查询

Couchbase & nodejs: View query with range, order and limited results

我是 couchbase 的新手,我正在尝试了解视图中的过滤、排序和限制结果如何协同工作。

Couchbase version: 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"
    }
}

我只想过滤 orderId = 2category.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() 函数的调用才能使我的视图正常运行。

有谁知道为什么? 谢谢

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