我使用Mongoose的聚合(MongoDB v3.2)。数据库中有factory1
和factory2
两个条目。每个工厂有一个字段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
?因为稍后我想再次获得完整的项目。由于
将$match
更改为使用$elemMatch
,以要求两个术语由相同的products
元素满足:
Factory.aggregate([
{ $match: { products: { $elemMatch: {
code1: 'aa',
code2: 'BB'
}}}}
]);