MongoDB:只获取在过去24小时内创建的文档?

boo*_*oom 21 mongodb

我想限制我正在制作的查询只查看过去24小时创建的文档.

构建此查询的最佳方法是什么?我如何根据日期进行限制?

spi*_*dog 23

添加createdAt字段,索引它,然后查询

db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}})
Run Code Online (Sandbox Code Playgroud)

这将返回86400秒之前的所有记录.


Jon*_*Ong 17

如果您没有使用任何其他索引并且使用默认ObjectID作为_id,则可以执行以下操作:

var ObjectID = require('mongodb').ObjectID

db.collection.find({
  _id: {
    $gt: ObjectID.createFromTime(Date.now() / 1000 - 24*60*60)
  }
}, callback)
Run Code Online (Sandbox Code Playgroud)

  • JavaScript 执行失败:ReferenceError: ObjectID 未定义 (2认同)
  • 我的坏,`createFromTime`.他们可能已经改变了它:http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html#objectid-createfromtime (2认同)

Tho*_*don 8

对于通过谷歌登陆这里的其他人,您可以在mongo shell中执行此操作,如下所示:

db.collection.find({ $where: function () { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000)  }  })
Run Code Online (Sandbox Code Playgroud)

  • 小心 `$where` http://docs.mongodb.org/manual/reference/operator/query/where/#op._S_where 它有性能问题。 (3认同)

jit*_*put 6

在猫鼬中使用它

let ObjectId    = require('mongodb').ObjectID;

Property.find({
    _id: {
        $gt: ObjectId.createFromTime(Date.now() / 1000 - 24 * 60 * 60)
    }
}, (err, result) => {
    console.log(err || result);
});
Run Code Online (Sandbox Code Playgroud)


Sal*_*ali 3

首先,如果您向人们提供您的收藏的架构,那将会非常有帮助。

但仅仅因为已经过去了 3 个小时而没有人回复,我会尝试:

假设您有一个条目,并且它有一个 createAt 字段,它是一个 ISODate:

{
somefield: "test",
createdAt: ISODate("2012-08-13T04:00:00Z")
}
Run Code Online (Sandbox Code Playgroud)

所以你需要做的就是给这个字段建立一个索引

db.yourColl.ensureIndex({createdAt:1});
Run Code Online (Sandbox Code Playgroud)

然后,您可以在 Node.js 中获取当前时间,替换您的 24 小时并获得开始值。(据我所知,mongdb 中没有类似 NOW 的东西。如果我错了,请纠正我。)

db.yourColl.find({
   createdAt: {
     $gte: start
   }
});
Run Code Online (Sandbox Code Playgroud)