我有一个看起来像这样的集合:
{
  _id: ObjectId("50a68673476427844b000001"),
  other fields
}
我想做一个范围查询来查找两个日期之间的记录.我知道我可以从mongo shell var中的ObjectId获取日期:
var aDate = ObjectId().getTimestamp()
但是目前还没有一种方法(据我现在可以搞清楚)创建一个仅包含时间戳部分的ObjectId - 我认为我的理想解决方案是无功能的mongo shell代码将是:
var minDate = ObjectId(new Date("2012-11-10"));
var maxDate = ObjectId(new Date("2012-11-17"));
使用minDate和MaxDate作为范围值.
有没有办法在SHELL中做到这一点 - 我对一些驱动程序产品不感兴趣.
我正在尝试使用指南针在字段上执行日期范围查询_id。我已经使用以下过滤器尝试了在这里找到的内容:
{_id: { $gte: ObjectId.fromDate(new Date('2019-01-01')) } }
我缺少什么?我想获取从某个日期开始的所有文档的列表(在本例中是从 2019 年 1 月 1 日至今)。不幸的是,文档字段中没有时间戳,因此我需要从对象 ID 中提取它。
Mongo有一个很好的功能,可以在创建文档时告诉您.
ObjectId("53027f0adb97425bbd0cce39").getTimestamp() = ISODate("2014-02-17T21:28:42Z")
我怎样才能找到2014年2月10日之前创建的所有文档?搜索周围但似乎不会出现这个问题.任何帮助表示赞赏!谢谢!
我知道我们可以使用getTimestamp()从 ObjectId 中检索时间戳,但是有没有办法从时间戳生成 ObjectId?
更具体地说,如果我有月和年的输入,那么我想将其转换为Mongo ObjectID以在 db 中查询,我该怎么做?
在 Mongo shell 中,如何过滤今天(或特定日期)添加的记录?我没有新记录时间戳的特定字段,但我想它可以从 ObjectID 恢复。
我需要监视记录的创建时间,以便进一步查询和修改。
我想到的第一件事是为文档提供一个“ createDateTime”字段,默认值为“ new Date()”,但是Mongodb说文档_id嵌入了时间戳,并且id是在创建文档时生成的,因此为该字段添加新字段听起来很虚构。
很多次,我已经看到人们为他们的数据设置一个“ createDateTime”,但我不知道他们是否知道mongodb的_id的详细信息。
我想知道应该将_id用作“ createDateTime”字段吗?最佳做法是什么?以及利弊。
感谢您的任何提示。
我怎样才能编写过滤器,这会导致今天创建的文档.我知道ObjectId有时间戳.我试过这个:
db.doc.find({_id : { $gte : ObjectId().getTimestamp().getTime() }}
我能写吗?
db.doc.find({'_id.getTimestamp().getTime()' : { $gte : ObjectId().getTimestamp().getTime() }}
我想在mongo shell中创建一个新的ObjectId但是在过去的Date中创建一个新的ObjectId,以便在过去模拟该文档的创建.这与ObjectId 的getTimestamp()函数相反(即给出一个时间戳,获取一个在调用时返回该时间戳的ObjectId getTimestamp)
任何想法如何做到这一点?
这个问题很受欢迎,但也有一些微妙的变化。我需要在创建它时使用其_id. 我没有任何date,createdAt字段,因为我看到mongo 使用它_id作为createdAt 时间戳。
如何使用此要点删除录制的内容(例如 30 天前创建的内容) ?
const date = new Date();
const daysToDeletion = 30;
const deletionDate = new Date(date.setDate(date.getDate() - daysToDeletion));
const db = <your-database>
db.messages.remove({_id : {$lt : deletionDate}});
上面返回一个
CastError
什么会起作用,正如我所说,我没有一个createdAt字段:
db.messages.remove({createdAt : {$lt : deletionDate}});