2016-05-29 7 views
1

検索を行う前に配列を巻き戻さなければならないのは分かっていますが、検索を実行する前に他のドキュメントの配列を巻き戻す方法はありますか?今は値が入っている配列全体を取得しています。

代わりの解決策として、完全な配列をフィルタリングして、各ドキュメントで参照している値のみを保持する方法はありますか?

EDIT:この例では例として

COLLECTION AAA 
{ 
array:[ 
    {_id:01}, 
    {_id:02} 
] 
} 

COLLECTION BBB 
{ 
array:[ 
    {AAA_id:01}, 
    {AAA_id:02} 
] 
} 

私はリンクされた値を取得するには、このコードを使用します。

db.BBB.aggregate(
{$unwind: '$array'}, 
    { 
     $lookup: 
     { 
      from: "AAA", 
      localField: "array.AAA_id", 
      foreignField: "array._id", 
      as: "linked" 
     } 
    } 
) 

しかし、私はこのような何かされているであろう:

{ 
array:[ 
    {AAA_id:01} 
] 
linked:[ 
    {_id:01}, 
    {_id:02} 
] 
} 
{ 
array:[ 
    {AAA_id:02} 
] 
linked:[ 
    {_id:01}, 
    {_id:02} 
] 
} 

代わりに、

{ 
array:[ 
    {AAA_id:01} 
] 
linked:[ 
    {_id:01} 
] 
} 
{ 
array:[ 
    {AAA_id:02} 
] 
linked:[ 
    {_id:02} 
] 
} 
+0

あなたの質問は広すぎます。 [最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve) – styvane

+0

を入力してください。ありがとう。 – Vonmood

答えて

2

$ lookupは、一致する基準で完全なドキュメントを取得します。この特定のケースで は不要な要素を取り除くために、あなたはこれに似$プロジェクトのパイプラインで$フィルタを使用することができます。

$project : { 
    _id : 1, //list all field here 
    linked: { 
     $filter : { 
      input : "$linked", 
      as : "item", 
      cond : { 
       $eq : ["$$item._id", "$$array.AAA_id"] 
      } 
     } 
    } 
}, 

それと他の方法との契約はまだありません私の知る限り。

関連する問題