2016-07-21 93 views
0

下面的代碼首先在一個字段上連接兩個集合,並嘗試過濾其他字段上的值。

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'具有相同的值,但它不會顯示在「結果」字段中。 如果是因爲'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「code」: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"}}}]);