检索Mongoid中的id数组

时间:2010-12-08 11:02:14

标签: ruby mongoid

如何在IDs中检索Mongoid数组?

arr=["id1","id2"]
User.where(:id=>arr)

如果您要检索其他属性

,则可以轻松完成此操作
User.where(:nickname.in=>["kk","ll"])

但我想知道如何在mongoid中做到这一点 - >这应该是一个非常简单和常见的操作

4 个答案:

答案 0 :(得分:43)

请注意,ID存储为:_id而不是:id。有id辅助方法,但在进行查询时,应使用:_id

User.where(:_id.in => arr)

通常我发现获取一个id列表进行复杂查询很有用,所以我做了类似的事情:

user_ids = User.only(:_id).where(:foo => :bar).distinct(:_id)
Post.where(:user_id.in => user_ids)

答案 1 :(得分:5)

或者简单地说:

arr = ['id1', 'id2', 'id3']
User.find(arr)

答案 2 :(得分:4)

browserenior建议的上述方法似乎不再适用,至少对我而言。我所做的是:

User.criteria.id(arr)

答案 3 :(得分:2)

user_ids = User.only(:_id).where(:foo => :bar).map(&:_id)
Post.where(:user_id.in => user_ids)

当用户数量很少时,上述解决方案可以正常工作。但是,当有数千个用户时,它将需要大量内存。

User.only(:_id).where(:foo => :bar).map(&:_id)

将在除id之外的每个字段中创建一个包含nil的User对象列表。

解决方案(对于mongoid 2.5):

User.collection.master.where(:foo => :bar).to_a.map {|o| o['_id']}