不使用$ unwind选择(Mongoose聚合)

时间:2016-08-15 02:29:36

标签: node.js mongodb mongoose aggregation-framework

我正在使用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的情况下进行选择?因为后来我想再次获得完整的物品。感谢

1 个答案:

答案 0 :(得分:2)

将您的$match更改为使用$elemMatch,要求同一个products元素满足这两个字词:

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