Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Mongodb Mongo总计$group发行_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb Mongo总计$group发行

Mongodb Mongo总计$group发行,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有以下模型数据: var orders = [{ _id: 'order_1' users: [{ name: 'Bob' _id: 'user_1', company: 'company_1' }, { name: 'John' _id: 'user_3', company: 'company_2' }] }, { _id: 'order_2' users: [{ name: 'Mary' _id: 'u

我有以下模型数据:

var orders = [{
  _id: 'order_1'
  users: [{
    name: 'Bob'
    _id: 'user_1',
    company: 'company_1'
  }, {
    name: 'John'
    _id: 'user_3',
    company: 'company_2'
  }]
}, {
  _id: 'order_2'
  users: [{
    name: 'Mary'
    _id: 'user_2',
    company: 'company_1'
  }]}];
使用聚合框架,我希望最终得到:

 [{
  _id: 'user_1',
  order: 'order_1',
  company: 'company_1'
}, {
  _id: 'user_2',
  order: 'order_2',
  company: 'company_1'
}];
守则:

return Order.aggregateAsync([{
  $unwind: '$users'
}, {
  $match: {
    'users.company': 'company_1'
  }
}, {
  $project: {
    id: '$users._id',
    order: '$_id',
    company: '$users.company',
  }
}, {
  $group: {
    _id: "$users"
  }
}]);
但有些事情并不完全正确。一旦我添加$group参数,我就会丢失结果中的所有数据,最后只得到数组中的用户ID

[ 
  { _id: 'user_1' },
  { _id: 'user_2' } 
]

我如何获得我在结果中预测的所有数据

对行进行分组后,aggregate无法确定需要哪一行,除非您指定它。 使用
$group
您甚至不需要
$project
。此查询可能会提供您所需的信息:

return Order.aggregateAsync([{
  $unwind: '$users'
}, {
  $match: {
    'users.company': 'company_1'
  }
}, {
  $group: {
    _id: "$users",
    id: { $first: '$users._id' },
    order: { $first: '$_id' },
    company: { $first: '$users.company' },
  }
}]);
我基本上只是将投影移动到分组下,在分组中可以使用任何类似于
$first
$last
或其他表达式的内容