我有一个包含几十万个文档的集合,我需要有效地检查其中一个文档。
以下是其中一个文件的示例:
{
"_id" : ObjectId( "4ee9b4239641dce218030000" ),
"last_seen" : Date( 1323938851402 ),
"is" : {
"4ee910de9641dc4906000000" : Date( 1323938851302 ),
"4ee211df9621dc4206000000" : Date( 1323938851402 ),
"4ef913de9631db4922000000" : Date( 1323938851102 ),
}
}
我知道文档的_id是4ee9b4239641dce218030000,我需要确定ID为4ee211df9621dc4206000000的“是”对象中的项目是否为3中的最新项,并且在最后5分钟内的时间戳值为。 / p>
如果有帮助,“last_seen”中存储的时间戳将始终与“is”对象中的最新记录的值相同。也许他们可以比较?
有关如何有效地使用MongoDB的任何想法吗?
答案 0 :(得分:1)
如何使“is”成为一个数组,按日期排序,然后查询将是这样的:
`{$and : [ {_id : "4ee9b..." },
{is[0].date: {$gt : now-5min }},
{is[0]._id : "4ee21.." }]}`
除非项目“4ee9b ..”是最新的并且不到5分钟,否则您将得不到任何结果。
答案 1 :(得分:1)
为什么要用查询来解决这个问题?你已经在做id-find了。只需编写从“是”获取最新元素的代码。当您可以使用您喜欢的任何语言的一行代码执行此操作时,不要通过更改架构或对最近的活动时间窗口做出任意假设来使事情过于复杂。
答案 2 :(得分:0)
最好在另一个系列中保留“是”。如果是这样,你可以随意对它进行排序,以便找出它是否是最新的id。