我有100000个文档,我需要检索具有最高值的前10个文档。
以下是简化文档的示例:
{
"_id" : ObjectId( "4f2fbeb0369a2ba603000000" ),
"usage" : {
"2012" : {
"2" : {
"project" : {
"4f182a76369a2b2903000000" : {
"site" : {
"1" : 5,
"2" : 1
}
}
}
}
}
}
}
可以在'usage.2012.2.project.4f182a76369a2b2903000000.site.1'中找到应用排序/限制的值(在上例中,值为5)。
问题在于,在某些文档中存在此对象,而在其他文档中则不存在。
现在我可以使用$ exists来检查对象是否存在,但是根据MongoDB手册使用$ exists是低效的。有没有其他方法可以做到这一点?如果需要,我可以更改架构..
答案 0 :(得分:3)
如果基于某些文档中不存在的值进行查询,则不会从结果集中排除不包含该值的文档。您不必提前使用$ exists过滤它们。
db.collection.find().sort( { "usage.2012.2.project.4f182a76369a2b2903000000.site.1" : -1 } ).limit(10)
上面的查询最多只返回10个值 - 它不会考虑排序字段不存在的文档。