从MongoDB find()结果集中标识最后一个文档
我正在尝试使用WebSocket将数据从node.js/MongoDB实例“流”到客户端。一切都很顺利 但是如何识别结果中的最后一个文档?我使用node.js连接到MongoDB 一个简化的例子:从MongoDB find()结果集中标识最后一个文档,mongodb,node.js,Mongodb,Node.js,我正在尝试使用WebSocket将数据从node.js/MongoDB实例“流”到客户端。一切都很顺利 但是如何识别结果中的最后一个文档?我使用node.js连接到MongoDB 一个简化的例子: collection.find({}, {}, function(err, cursor) { if (err) sys.puts(err.message); cursor.each(function(err, doc) { client.send(doc); });
collection.find({}, {}, function(err, cursor) {
if (err) sys.puts(err.message);
cursor.each(function(err, doc) {
client.send(doc);
});
});
由于mongodb objectId contatins的创建日期,您可以按id降序排序,然后使用限制(1):
注意:我对node.js一点也不熟悉,上面的命令是mongoshell命令,我想您可以轻松地将其重写为node.js。假设我有公司集合。下面的代码片段为我提供了集合中的最后一个文档
db.companies.find({},{"_id":1}).skip(db.companies.find().count()-1);
代码不能依赖于_id,因为如果它是用户定义的值,它可能不总是在特定的模式上。如果要使用游标,请使用排序和限制:
var last = null;
var findCursor = collection.find({}).cursor();
findCursor.on("data", function(data) {
last = data;
...
});
findCursor.on("end", function(data) {
// last result in last
....
});
当创建对象的频率超过1秒时,情况并非如此,因为ObjectId包含4字节的值,表示自Unix纪元以来的秒数。@EddieJamsession理论上是的,但您测试过这个吗?db.collection.find().limit(1).sort({u id:-1})//刚才我已经考过了。。排序应该是最后一种方法。这可能不是从数据库流式处理文档的最佳方法,例如,如果文档插入的速度快于您以这种方式查询文档,该怎么办?看见
var last = null;
var findCursor = collection.find({}).cursor();
findCursor.on("data", function(data) {
last = data;
...
});
findCursor.on("end", function(data) {
// last result in last
....
});