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

我想使用节点查询从我的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 { ... } }); } }); 

如果我需要制作devise文档,我会在Cloudant的在线界面中完成,所以如果需要的话,不要太担心为此做一个可执行的答案。

需要注意的是,Cloudant Query要求您在执行查询之前定义索引,例如从文档中索引“name”字段:

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

我们现在可以使用findfunction来查询数据,如您所示:

 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) { }); 

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

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

  • 一个时间string: { "name": "Alice", "datetime": "2015-11-26 10:22:24 Z" }
  • 时间戳: { "name": "Alice", "ts": "123456678" }

当你的文档包含一个代表时间的字段,那么你的索引可以被创build到索引中,例如

 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

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

应该

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