2016-08-15 52 views
0

我正在使用Mongoose的聚合(MongoDB v3.2)。數據庫中有兩個項目factory1factory2。每個工廠都有一個字段products,它是一個數組。

我要選擇具有產品code1=='aa' & code2=='BB'

// factory1.products 
[{ 
    code1: 'aa', 
    code2: 'AA' 
}, { 
    code1: 'bb', 
    code2: 'BB' 
}] 

// factory2.products 
[{ 
    code1: 'aa' 
    code2: 'BB' 
}] 

這是我現在該怎麼辦所有的工廠:

Factory 
    .aggregate([ 
    { $unwind: '$products' }, // Ensure get factory2 only when use $match. Without $unwind, will get both factory1 and factory2 
    { $match: { 
     'products.code1': 'aa', 
     'products.code2': 'BB' 
    }} 
    ]); 

有沒有辦法不使用$unwind選擇?因爲後來我想再次獲得完整的項目。由於

回答

2

更改$match使用$elemMatch,要求這兩個詞由同一個products元素滿足:

Factory.aggregate([ 
    { $match: { products: { $elemMatch: { 
    code1: 'aa', 
    code2: 'BB' 
    }}}} 
]); 
+0

哇,謝謝,工作完美!我只知道$ elemMatch也可以用於聚合,不僅在查詢中! –