【问题标题】:Getting the latest documents from a Cloudant/CouchDB database from NodeJS从 NodeJS 获取 Cloudant/CouchDB 数据库的最新文档
【发布时间】:2015-11-25 19:18:24
【问题描述】:

我想使用节点查询从我的 Cloudant 数据库中获取最后一个 n 文档。到目前为止,我已将其范围缩小到find() 函数,但文档仅真正解释了如何检索包含绝对值的所有文档,例如:

db.find({selector:{name:'Alice'}}, function(er, result) {
    ...
});

(取自https://www.npmjs.com/package/cloudant#cloudant-query

我要找的是这个 SQL 的等价物:

SELECT * FROM db WHERE name = "Alice" LIMIT 10

我目前的代码是这样的:

var cloudant = require('cloudant');
cloudant({account: username, password: password}, function (err, conn) {
    if (err) {
        callback("Could not initialize connection to Cloudant: " + err);
    } else {
        var db = conn.db.use('mydb');
        db.find(???, function(err, data) {
            if (err) {
                callback("No data found: " + err);
            } else {
                ...
            }
        });
    }
});

如果我需要制作设计文档,我会在 Cloudant 在线界面中完成,所以如果有必要,不用太担心为此制作可执行的答案。

【问题讨论】:

    标签: node.js couchdb cloudant


    【解决方案1】:

    请务必注意,Cloudant Query 要求您在执行查询之前定义索引,例如从您的文档中索引“名称”字段:

    db.index( {name:'nameindex', type:'json', index:{fields:['name']}}
    

    我们现在可以按照您的指示使用find 函数查询数据:

    var query = { selector: { name: 'Alice' }};
    db.find(query, function(err, data) {
    });
    

    关于您的问题的有趣之处在于短语“最后 n 个文档”。我们可以通过在查询中添加“限制”来检索“n”个文档。

    var query = { selector: { name: 'Alice' }, limit: 10};
    db.find(query, function(err, data) {
    });
    

    但这并不一定表示最后十个文档;它只是将结果集限制为十。

    如果您希望查询结果按时间顺序显示,那么您需要在文档中显示时间,例如

    • 时间字符串:{ "name": "Alice", "datetime": "2015-11-26 10:22:24 Z" }
    • 时间戳:{ "name": "Alice", "ts": "123456678" }

    当您的文档包含代表时间的字段时,可以创建索引并将其合并到索引中,例如

    db.index( {name:'nameindex', type:'json', index:{fields:['name','time']}}
    

    并且可以查询文档以 *reverse order * 出现(以获取最新的优先):

    var query = { selector: { name: 'Alice' }, sort: [ { name: "desc"}, { ts: "desc"]};
    db.find(query, function(err, data) {
    });
    

    您可能还想查看type:"text" 索引。见https://docs.cloudant.com/cloudant_query.html

    【讨论】:

    • { "name": "Alice", "datetime": "2015-11-26 10:22:24 Z" } 对于像上面这样的时间戳,对文档进行排序的查询参数是什么降序 ?也可以对 db.search() 使用类似的查询?
    【解决方案2】:
    var query = { selector: { name: 'Alice' }, sort: [ { name: "desc"}, { ts: "desc"]};
    

    应该是

    var query = { selector: { name: 'Alice' }, sort: [ { name: "desc"}, { ts: "desc"}];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多