Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 不使用$unwind进行选择(Mongoose聚合)_Node.js_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Node.js 不使用$unwind进行选择(Mongoose聚合)

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'

我正在使用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
更改为用于要求相同的
产品满足这两个术语
元素:

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

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

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

哇,谢谢,很好用!我只知道$elemMatch也可以用于聚合,而不仅仅是查询!哇,谢谢,很好用!我只知道$elemMatch也可以用于聚合,而不仅仅是查询!