从 NodeJS 的 Cloudant/CouchDB 数据库中获取最新文档
Getting the latest documents from a Cloudant/CouchDB database from NodeJS
我想使用节点查询从我的 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 要求您在执行查询之前定义索引,例如从您的文档中索引 'name' 字段:
db.index( {name:'nameindex', type:'json', index:{fields:['name']}}
我们现在可以使用您指出的 find
函数查询数据:
var query = { selector: { name: 'Alice' }};
db.find(query, function(err, data) {
});
关于您的问题,有趣的是短语 'the last n documents'。我们可以通过在查询中添加 'limit' 来检索 '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
var query = { selector: { name: 'Alice' }, sort: [ { name: "desc"}, { ts: "desc"]};
应该是
var query = { selector: { name: 'Alice' }, sort: [ { name: "desc"}, { ts: "desc"}];
我想使用节点查询从我的 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 要求您在执行查询之前定义索引,例如从您的文档中索引 'name' 字段:
db.index( {name:'nameindex', type:'json', index:{fields:['name']}}
我们现在可以使用您指出的 find
函数查询数据:
var query = { selector: { name: 'Alice' }};
db.find(query, function(err, data) {
});
关于您的问题,有趣的是短语 'the last n documents'。我们可以通过在查询中添加 'limit' 来检索 '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
var query = { selector: { name: 'Alice' }, sort: [ { name: "desc"}, { ts: "desc"]};
应该是
var query = { selector: { name: 'Alice' }, sort: [ { name: "desc"}, { ts: "desc"}];