2014-01-09 20 views
0

我有一个看起来是这样的文件:的MongoDB查询文档超过X天以上,并没有创造,因为

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

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

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

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

老实说,我建议你改用日期时间。下面的答案是完美的,但使用基于ObjectId的这种方法太难了。 –

+0

所以我很困惑,你的编辑过的文件有一个时间标记(创建:日期时间)?或者那个信息没有被放入文档中。 – jwillis0720

+0

是的,我的原始文档没有“创建”字段。听Maximiliano Rios和Sergey Eremin我补充说。 – user3175546

回答

0
> db.foo.findOne()._id.getTimestamp 
function(){ 
return new Date(parseInt(this.valueOf().slice(0,8), 16)*1000); 
} 

这是贝壳助手功能getTimestamp的来源,你想要做什么。但是在查询中使用它是不可能的。 Mongo无法在查询中使用16位数字或将其转换为10位数字。

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