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を取得ImageView(ImageViewsの配列)
- 2. モンゴイドのIdで削除
- 3. 検索IDが配列の各IDのMySqlのリストを取得する
- 4. MYSQLのID配列からPHPから配列を取得する
- 5. 関係のID配列を効率的に取得する
- 6. 空白を持つモンゴイド配列
- 7. モンゴイドの取引(MongoDB)
- 8. モンゴイドで最後のN文書を取得するには?
- 9. wordpressでカテゴリーIDの配列を取得しますか?
- 10. 配列のソート後にIDを取得しますか?
- 11. モンゴイドとRSpecのIDの問題
- 12. 配列内のisset IDが同じ配列の定義されたIDから値を取得しますか?
- 13. イメージIDをjquery配列に取得する方法は?
- 14. 配列からIDを取得するfile_get_contents
- 15. get_pagesでページIDを配列で取得するには?
- 16. MongoDBの友達IDでフレンド名の配列を取得
- 17. idのルビーのクエリ配列から値を取得
- 18. Angularfire - 配列内のすべてのオブジェクトの一意のIDを取得する
- 19. 配列のjavascriptから要素idを取得
- 20. IDでmysql配列の製品を取得
- 21. Laravel IDの配列からコレクションを取得
- 22. Wordpress - 配列内のWpオブジェクトにアクセスし、すべてのIDを取得する
- 23. 配列内のすべてのイメージリソースIDを動的に取得する
- 24. は、私がリクエスト配列と異なるIDを取得laravel
- 25. WordPressのユーザーIDの配列から投稿を取得する方法は?
- 26. CakePHP IDの配列で複数の行を取得する方法
- 27. 配列からIdを取得して切り替えます
- 28. モンゴイド検索でタグの配列を検索
- 29. アーク配列の要素をキーの配列で取得する
- 30. numpy配列から別の配列のサイズを取得する
ユーザーの量が少ない場合に上記溶液が正常に動作します。しかし、何千人ものユーザーがいる間に多くのメモリが必要になります。 – dpaluy
@dpaluyあなたが正しいです - このアプローチはハックです。また、第1クエリと第2クエリの間でデータが変更される可能性があります。慎重に使用するか、より良い方法を見つけてください。 – bowsersenior
もっと良い方法は、 '.map(&:_ id)'の代わりに '.distinct(:_ id)'を使うことです。 'distinct'は、クエリを実行する際に動作します。これは、配列をループするようにレールに指示するよりも少し速いです。 – Zakwan