2016-07-21 6 views
0

以下のコードは、最初に1つのフィールドで2つのコレクションを結合し、他のフィールドで値をフィルタリングしようとします。

db.zeroDimFacts.aggregate(
{$lookup:{from:"zeroDim",localField:"Kind",foreignField:"Model", as:"EmbedUp"}}, 
{$project: {"EmSub":"$EmbedUp.Sub","Result": {$eq:["$Type","$EmbedUp.Sub"]}, "type":"$Type"}}) 

以下のコードの出力を確認してください。 'EmSub' & '$ Type'の値が同じであっても、 'Result'フィールドには表示されません。 'EmSub'が配列として表示されている場合は、その配列に含まれる値のみを比較するにはどうすればよいですか?

/* 1 */ 
{ 
    "_id" : NumberLong(1), 
    "EmSub" : [ 
     "Fruit" 
    ], 
    "Result" : false, 
    "type" : "Fruit" 
} 

/* 2 */ 
{ 
    "_id" : NumberLong(2), 
    "EmSub" : [ 
     "Fruit" 
    ], 
    "Result" : false, 
    "type" : "Fruit" 
} 

/* 3 */ 
{ 
    "_id" : NumberLong(3), 
    "EmSub" : [ 
     "Fruit" 
    ], 
    "Result" : false, 
    "type" : "Fruit" 
} 
+0

は$ EQ試してください:[ "$タイプ"、 "$ EmbedUp.Sub $。"] –

+0

@AmiramKorachは:以下のエラーを得た: アサート:コマンドが失敗しました:{ \t "OK":0、 \t "ERRMSG": "FieldPathフィールド名は '$' で始めることはできません"、 \t "コード":16410 }:集合体は申し訳ありませんが –

+0

に失敗しました。 "EmSub":{$ first: "$ EmbedUp.Sub"}と比較して$ eq:["$ Type"、{$ first: "$ EmbedUp.Sub"}] –

答えて

0

あなたはこのようにその要素を比較するための配列を楽しみながらおくつろぎいただけます。

db.zeroDimFacts.aggregate([{$lookup:{from:"zeroDim",localField:"Kind",foreignField:"Model", as:"EmbedUp"}}, 
{$unwind: "$EmbedUp"}, 
{$project: {"EmSub":"$EmbedUp.Sub","Result": {$eq:["$Type","$EmbedUp.Sub"]}, "type":"$Type"}}]);

これは、単一zeroDimFactsの_idのためにあなたに複数の結果を与えることができ、しかし、あなたができるグループにそれらを再び

db.zeroDimFacts.aggregate([{$lookup:{from:"zeroDim",localField:"Kind",foreignField:"Model", as:"EmbedUp"}}, 
{$unwind: "$EmbedUp"}, 
{$project: {"EmSub":"$EmbedUp.Sub","Result": {$eq:["$Type","$EmbedUp.Sub"]}, "type":"$Type"}}, 
{$group: {_id: "$_id", EmSub: {$push: "$EmSub"}, Result: {$push: "$Result"}, type: {$push: "$type"}}}]);
関連する問題