如何在IDs
中检索Mongoid
数组?
arr=["id1","id2"]
User.where(:id=>arr)
如果您要检索其他属性
,则可以轻松完成此操作User.where(:nickname.in=>["kk","ll"])
但我想知道如何在mongoid中做到这一点 - >这应该是一个非常简单和常见的操作
答案 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']}