IDs
の配列をMongoid
にどのように取得しますか? >これはモンゴイドのIDの配列を取得する
23
A
答えて
39
非常に単純かつ一般的な操作でなければなりません - あなたは
User.where(:nickname.in=>["kk","ll"])
別の属性を取得している。しかし、私はmongoidでこれを行う方法を疑問に思っている場合は、これを簡単に行うことができます
arr=["id1","id2"]
User.where(:id=>arr)
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)
4
上記の方法は、browserseniorによって提案されていません、少なくとも私のために、もう動作していないようです。私は何をすることです:
User.criteria.id(arr)
+3
ちょっとした注意が必要です。 Mongoid 2.0.0以降では、 'id'の代わりに' for_ids'を使う必要があります: 'User.criteria.for_ids(arr)' – bowsersenior
5
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']}
関連する問題
- 1. モンゴイドのIdで削除
- 2. wordpressでカテゴリーIDの配列を取得しますか?
- 3. 空白を持つモンゴイド配列
- 4. get_pagesでページIDを配列で取得するには?
- 5. イメージIDをjquery配列に取得する方法は?
- 6. idのルビーのクエリ配列から値を取得
- 7. 配列内のすべてのイメージリソースIDを動的に取得する
- 8. アーク配列の要素をキーの配列で取得する
- 9. CakePHP IDの配列で複数の行を取得する方法
- 10. モンゴイドの取引(MongoDB)
- 11. モンゴイドで最後のN文書を取得するには?
- 12. 配列の答えを取得する
- 13. foreachの配列インデックスを取得する
- 14. 配列の合計を取得する
- 15. モンゴイドとRSpecのIDの問題
- 16. PHPのセッション配列をjavascript配列に取得する方法
- 17. 配列の配列から値を取得する方法は?
- 18. Facebookのid配列から名前のリストを取得していますか?
- 19. 取得とのlocalStorage配列
- 20. Rの配列の列インデックス行列を取得するには?
- 21. モンゴイド検索でタグの配列を検索
- 22. VBA - 別の配列内の配列のデータを取得
- 23. jsonから配列を取得する
- 24. シーケンスを配列から取得する
- 25. MongoIdを配列から取得する
- 26. 配列クラス名を取得する
- 27. 配列に値を取得する
- 28. Lodash - 配列を取得
- 29. matplotlib:カラーマップ配列を取得
- 30. モンゴイドのモデルのすべてのカラム名を取得する方法
ユーザーの量が少ない場合に上記溶液が正常に動作します。しかし、何千人ものユーザーがいる間に多くのメモリが必要になります。 – dpaluy
@dpaluyあなたが正しいです - このアプローチはハックです。また、第1クエリと第2クエリの間でデータが変更される可能性があります。慎重に使用するか、より良い方法を見つけてください。 – bowsersenior
もっと良い方法は、 '.map(&:_ id)'の代わりに '.distinct(:_ id)'を使うことです。 'distinct'は、クエリを実行する際に動作します。これは、配列をループするようにレールに指示するよりも少し速いです。 – Zakwan