【问题标题】:Select without using $unwind (Mongoose aggregation)不使用 $unwind 进行选择(Mongoose 聚合)
【发布时间】:2016-12-21 06:33:18
【问题描述】:

我正在使用 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的选择方法?因为稍后我想再次获得完整的项目。谢谢

【问题讨论】:

    标签: node.js mongodb mongoose aggregation-framework


    【解决方案1】:

    将您的 $match 更改为使用 $elemMatch 以要求相同的 products 元素满足这两个条件:

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

    【讨论】:

    • 哇,谢谢,完美!我只知道 $elemMatch 也可以用于聚合,而不仅仅是查询!
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2015-08-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多