1

我有一个像这样的 mongo 对象:

{
    "_id" : ObjectId("4fa291baf5de89b89cb03f4e"),
    "examples" : [
        "!@3123123123", "23423fd34", "23423we4234"
    ]
}

我需要选择所有具有 >= 3 个示例的对象。这样做的正确方法是什么?

谢谢。

4

2 回答 2

3

维护一个专用计数器变量作为文档的一部分,并使用它来执行相关查询。

于 2012-05-06T13:03:28.847 回答
1

有不同的方法可以做到这一点。如果您的收藏不是很大,只有几千个条目,那么您可以这样做:

User.all.select {|user| !user['examples'].nil? and user['examples'].count >= 3}

这会将集合中的所有条目加载到内存中,并使用 Ruby 原生特性进行选择。如果集合中有 1000 万个条目,则不应这样做。

从 MongoDB 2.2+ 开始,您可以这样做:

User.collection.find({'examples.2' => {'$exists' => true}})

这将返回在“示例”子集合中至少有 3 个元素的所有用户。计数从 0 开始,即子集合中元素的位置。我们在VersionEye使用此功能来识别不关注任何内容的用户。

于 2014-01-03T09:47:03.530 回答