MongoDB替代$存在

时间:2012-02-06 13:57:02

标签: mongodb

我有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是低效的。有没有其他方法可以做到这一点?如果需要,我可以更改架构..

1 个答案:

答案 0 :(得分:3)

如果基于某些文档中不存在的值进行查询,则不会从结果集中排除不包含该值的文档。您不必提前使用$ exists过滤它们。

db.collection.find().sort( { "usage.2012.2.project.4f182a76369a2b2903000000.site.1" : -1 } ).limit(10)

上面的查询最多只返回10个值 - 它不会考虑排序字段不存在的文档。