检索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']}