Node.js 不使用$unwind进行选择(Mongoose聚合)
我正在使用Mongoose的聚合(MongoDB v3.2)。数据库中有两个项目Node.js 不使用$unwind进行选择(Mongoose聚合),node.js,mongodb,mongoose,aggregation-framework,Node.js,Mongodb,Mongoose,Aggregation Framework,我正在使用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'
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
更改为用于要求相同的产品满足这两个术语
元素:
Factory.aggregate([
{ $match: { products: { $elemMatch: {
code1: 'aa',
code2: 'BB'
}}}}
]);
将您的
$match
更改为使用,以要求相同的产品满足这两个条件
元素:
Factory.aggregate([
{ $match: { products: { $elemMatch: {
code1: 'aa',
code2: 'BB'
}}}}
]);
哇,谢谢,很好用!我只知道$elemMatch也可以用于聚合,而不仅仅是查询!哇,谢谢,很好用!我只知道$elemMatch也可以用于聚合,而不仅仅是查询!