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

标签 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 在线界面中这样做,所以如果有必要,不要太担心为此制作可执行的答案。

最佳答案

请务必注意,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']}}

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

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

关于node.js - 从 NodeJS 的 Cloudant/CouchDB 数据库中获取最新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33924762/

相关文章:

node.js - 如何在cloudant上进行简单的查找?

javascript - 如何将socket.io与两个文件一起使用?

node.js - Google Cloud Endpoints 客户端库 NodeJS

node.js - 无法启动 webpack-dev-server - 找不到模块

android - 移动 Couchbase 的启动时间是否变得不切实际?

erlang - CouchDB:Erlang中的map-reduce

node.js - 我可以从一份源代码副本运行多个 Node 进程吗

java - Couchdb 通过 Httpclient 上传图片

apache - 具有使用自定义 session 端点的连接池的反向代理?

javascript - 使用 node.js 函数在 cloudant 中创建搜索查询