node.js - Couchbase 和 nodejs : View query with range, 顺序和有限的结果

标签 node.js couchbase

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

Couchbase version: 3.0.1

我使用 nodejs 作为 SDK。

我有这样的 map 功能

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() 函数的调用才能让我的 View 正常运行。

有人知道为什么吗? 谢谢

最佳答案

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

关于node.js - Couchbase 和 nodejs : View query with range, 顺序和有限的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946742/

相关文章:

arrays - 如何从node js中的json对象获取值数组

javascript - 让 Grunt.js 运行 node.js 模块

docker - docker上的couchbase在哪里替换ip?

c - (建立TCP连接时出错)

node.js - Sails JS - 如何将用户 api 模型连接到 Couchbase 中的用户存储桶?

couchbase - 使用 Couchbase 处理大型数据集

node.js - 从 Node.js SDK 向 Couchbase 发出并行数据库请求

xml - windows上通过node.js加载xml文件

Node.js http 模块未收到 WS 请求(使用 https-proxy-agent)

javascript - 对 TypeScript 类型的 ChildProcess 类的引用