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

发布于 2024-11-03 12:27:39 字数 410 浏览 1 评论 0原文

我正在尝试使用 websockets 将数据从 node.js/MongoDB 实例“流”到客户端。一切都运转良好。

但如何识别结果中的最后一个文档呢?我正在使用 node-mongodb-native 从 node.js 连接到 MongoDB。

一个简化的例子:

collection.find({}, {}, function(err, cursor) {
  if (err) sys.puts(err.message);

  cursor.each(function(err, doc) {
    client.send(doc);
  });                
});

I'm trying to 'stream' data from a node.js/MongoDB instance to the client using websockets. It is all working well.

But how to I identify the last document in the result? I'm using node-mongodb-native to connect to MongoDB from node.js.

A simplified example:

collection.find({}, {}, function(err, cursor) {
  if (err) sys.puts(err.message);

  cursor.each(function(err, doc) {
    client.send(doc);
  });                
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

路还长,别太狂 2024-11-10 12:27:39

由于 mongodb objectId 包含创建日期,您可以按 id 降序排序,然后使用 limit(1):

db.collection.find().sort( { _id : -1 } ).limit(1);

注意:我根本不熟悉 Node.js,上面的命令是 mongo shell 命令,我想您可以轻松地将其重写为 Node .js。

Since mongodb objectId contatins creation date you can sort by id, descending and then use limit(1):

db.collection.find().sort( { _id : -1 } ).limit(1);

Note: i am not familiar with node.js at all, above command is mongo shell command and i suppose you can easy rewrite it to node.js.

温柔女人霸气范 2024-11-10 12:27:39

假设我有公司集合。下面的代码片段给了我集合中的最后一个文档。

db.companies.find({},{"_id":1}).skip(db.companies.find().count()-1);

代码不能依赖 _id,因为如果它是用户定义的值,它可能并不总是遵循特定模式。

Say I have companies collection. Below snippet gives me last document in the collection.

db.companies.find({},{"_id":1}).skip(db.companies.find().count()-1);

Code cannot rely on _id as it may not be on a specific pattern always if it's a user defined value.

神也荒唐 2024-11-10 12:27:39

如果你想使用游标,请使用排序和限制:

var last = null;
var findCursor = collection.find({}).cursor();
findCursor.on("data", function(data) {
   last = data;
   ...
});
findCursor.on("end", function(data) {
   // last result in last
   ....
}); 

Use sort and limit, if you want to use cursor :

var last = null;
var findCursor = collection.find({}).cursor();
findCursor.on("data", function(data) {
   last = data;
   ...
});
findCursor.on("end", function(data) {
   // last result in last
   ....
}); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文