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

时间:2015-11-26 20:45:00

标签: node.js 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"
    }
}

我想只过滤 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);
});

错误说:

  

错误:query_parse_error:没有行可以匹配您的键范围,反转您的start_key和end_key或设置descending = false

请注意,如果我订购ASC ,则也会发生错误。我必须删除对.order()函数的调用才能使我的视图正常运行。

有谁知道为什么? 感谢

1 个答案:

答案 0 :(得分:3)

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