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