【问题标题】:mongodb query documents older than x days, and none created sincemongodb 查询文档早于 x 天,此后没有创建
【发布时间】:2014-01-09 00:29:43
【问题描述】:

我的文档如下所示:

{
    _id: ObjectId('1234'),
    name: 'Some name',
}

我如何编写一个查询,该查询将返回 60 多天前创建 _id 的文档(根据 ObjectId 中的生成时间),并且此后没有创建具有相同名称的文档。然后我想过滤到只有具有不同名称的文档。

编辑:好的,如果文档现在看起来像这样,我该如何实现我正在寻找的结果?

{
    _id: ObjectId('1234'),
    name: 'Some name',
    created: Datetime()
}

【问题讨论】:

  • 老实说,我建议您改用日期时间。下面的答案很完美,但是这个基于ObjectId的方法太难用了。
  • 所以我很困惑,您编辑的文档中有时间戳(创建:日期时间)?或者该信息没有放入文档中。
  • 是的,我的原始文档没有“创建”字段。听了 Maximiliano Rios 和 Sergey Eremin 我添加了它。

标签: mongodb


【解决方案1】:
> db.foo.findOne()._id.getTimestamp
function (){
return new Date(parseInt(this.valueOf().slice(0,8), 16)*1000);
}

这是 shell 辅助函数 getTimestamp 的源代码,它可以满足您的需求。但是不可能在查询中使用它。 Mongo 不能在查询中使用 16 基数或将它们转换为 10 基数。

如果您真的想使用_id 作为时间来源,您必须获取整个 集合并在您的应用中进行转换。您绝对应该为每个文档添加一个时间字段来获取文档的年龄。

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多