Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MongoDB find()结果集中标识最后一个文档_Mongodb_Node.js - Fatal编程技术网

从MongoDB find()结果集中标识最后一个文档

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

我正在尝试使用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);
  });                
});

由于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
   ....
});