2016-08-21 3 views
0

私はmongoの "reports"というコレクションを持っています。これは、顧客がコメントして議論する能力を持っています。ここで

は「議論」配列は、各レポートでどのように見えるかです:頻繁には変更各コメント以上のユーザーに表示される情報としては

"discussions" : [ 
    { 
     "user_id" : "david", 
     "timestamp" : ISODate("2016-03-17T01:15:00Z"), 
     "comment" : "I was wondering, did anyone else find it interesting?", 
     "replies" : [ 
      { 
       "user_id" : "kevin", 
       "timestamp" : ISODate("2016-03-17T01:15:00Z"), 
       "comment" : "Not really" 
      } 
     ] 
    } 
] 

、私は参照を使用してから自分の情報を引き出したいです」 「users_id」フィールドに基づく「ユーザー」コレクションを作成し、それぞれのディスカッションポストに情報を埋め込むのではなく、 私はデータベース全体を断片化する柔軟性を持たせたいので、 "$ lookup"はおそらく無駄です(私が正しく理解すれば、 "$ lookup"の "from"フィールドは断片化できません)。

したがって、私は「$または」は、次のSQLのようになります。クエリを構築したい:

SELECT * FROM USERS WHERE id IN ('david', 'kevin') 

、それはそれらを組み合わせ、その後、ユーザーのコレクションから追加のユーザー情報を引っ張ってきます残りのコメントの詳細はアプリケーションレベルで表示されます。

そのため、私がfind()にプッシュするクエリは、アプリケーションによって構築され、 "レポート"の結果を反復して "user_id"を抽出します。 これは、クエリののvar_dumpがどのように見えるかです:

array(1) { 
    ["$or"]=> 
    array(1) { 
    [0]=> 
    array(1) { 
     ["_id"]=> 
     string(4) "david" 
    }, 
    [1]=> 
    array(1) { 
     ["_id"]=> 
     string(4) "kevin" 
    } 
    } 
} 

しかし、私がデータベースにそれらのユーザーを持つにもかかわらず、何の結果を得ていないとして動作するようには思えません。 注: "users"コレクション内のユーザーの_idはユーザー名です。

私は$またはクエリを間違って実行しています(ドキュメントに表示されているのは、すべて「$または」です)。 これを完全に無効にするより良い方法はありますか? ありがとうございます!

答えて

0

あなたはむしろそのためにインクエリを使うべきです。 mongo-syntaxで:

db.users.find({ "_id" : { $in : [ "david", "kevin" ] } }) 
関連する問題