检索Mongoid中的id数组

你如何在Mongoid检索一个IDs数组?

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

如果要检索其他属性,则可以轻松完成此操作

 User.where(:nickname.in=>["kk","ll"]) 

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

请记住,ID存储为:_id而不是:id 。 有一个id帮助方法,但是当你进行查询时,你应该使用:_id

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

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

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

或者干脆:

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

对于我来说,browsersenior建议的上述方法似乎不再起作用了。 我所做的是:

 User.criteria.id(arr) 
 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']}