我有一个像这样的mongo对象:
{
"_id" : ObjectId("4fa291baf5de89b89cb03f4e"),
"examples" : [
"!@3123123123", "23423fd34", "23423we4234"
]
}
我需要选择包含> = 3个示例的所有对象。 这样做的正确方法是什么?
感谢。
答案 0 :(得分:3)
维护专用计数器变量作为文档的一部分,并使用此变量执行相关查询。
答案 1 :(得分: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使用此功能来识别不关注任何内容的用户。