从NodeJS获取Cloudant / CouchDB数据库中的最新文档

时间:2015-11-25 19:18:25

标签: node.js couchdb cloudant

我想使用Node查询从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在线界面中这样做,所以如果有必要,不要过于担心可执行的答案。

2 个答案:

答案 0 :(得分:3)

请注意,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) {
});

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

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

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

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

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

并且可以查询文档以*反向顺序*(以获取最新的第一个):

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

答案 1 :(得分:1)

{catId : '', catTitle : ''}

应该是

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