Retrieving array of ids in Mongoid

前端 未结 4 454
余生分开走
余生分开走 2020-12-28 15:11

how do you retrieve an array of IDs in Mongoid?

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

You can do this eas

相关标签:
4条回答
  • 2020-12-28 15:48

    The above method suggested by browsersenior doesn't seem to work anymore, at least for me. What I do is:

    User.criteria.id(arr)
    
    0 讨论(0)
  • 2020-12-28 15:57

    Remember that the ID is stored as :_id and not :id . There is an id helper method, but when you do queries, you should use :_id:

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

    Often I find it useful to get a list of ids to do complex queries, so I do something like:

    user_ids = User.only(:_id).where(:foo => :bar).distinct(:_id)
    Post.where(:user_id.in => user_ids)
    
    0 讨论(0)
  • 2020-12-28 16:03

    Or simply:

    arr = ['id1', 'id2', 'id3']
    User.find(arr)
    
    0 讨论(0)
  • 2020-12-28 16:03
    user_ids = User.only(:_id).where(:foo => :bar).map(&:_id)
    Post.where(:user_id.in => user_ids)
    

    The solution above works fine when amount of users is small. But it will require a lot of memory while there are thousands of users.

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

    will create a list of User objects with nil in each field except id.

    The solution (for mongoid 2.5):

    User.collection.master.where(:foo => :bar).to_a.map {|o| o['_id']}
    
    0 讨论(0)
提交回复
热议问题