Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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 具有mongoose聚合和总和嵌套字段的节点_Node.js_Mongodb_Mongoose_Aggregation Framework_Mongodb Aggregation - Fatal编程技术网

Node.js 具有mongoose聚合和总和嵌套字段的节点

Node.js 具有mongoose聚合和总和嵌套字段的节点,node.js,mongodb,mongoose,aggregation-framework,mongodb-aggregation,Node.js,Mongodb,Mongoose,Aggregation Framework,Mongodb Aggregation,当我对我的收藏执行此查询时 models.Project.find(function(err, result) { //result = doc below }).populate('media') 。。。我得到这个结果: { _id: 57f36baa6cf34d079c8474a0, code: 'ZMIA', __v: 0, media:[ { _id: 57f36bb26cf34d079c847766, project_cod

当我对我的收藏执行此查询时

models.Project.find(function(err, result) {
    //result = doc below
}).populate('media')
。。。我得到这个结果:

{ 
  _id: 57f36baa6cf34d079c8474a0,
  code: 'ZMIA',
  __v: 0,
  media:[
    { 
      _id: 57f36bb26cf34d079c847766,
      project_code: 'ZMIA',
      amount: 228,
      __v: 0 
    },
    { 
      _id: 57f36bb26cf34d079c84775c,
      project_code: 'ZMIA',
      amount: 250,
      __v: 0 
    } 
  ]
},
{ 
  _id: 57f36baa6cf34d079c8474a1,
  code: 'ZMJU',
  __v: 0,
  media: [] 
}

media
是一个ref字段。如何聚合嵌套的媒体对象(如果存在)若要
$sum
查看
金额
字段并按
项目\u code

对结果进行分组,您可以使用聚合框架,在该框架中运行一个聚合管道,该聚合管道由一个初始管道组成,该管道将对
媒体
字段进行反规范化,因为它是一个数组,然后是一个操作员对具有
介质的集合执行左联接。需要另一个操作符来展平连接产生的数组字段,然后在展平的文档上执行操作符管道以产生所需的结果

运行以下管道应该适合您:

models.Project.aggregate([
    { "$unwind": "$media" },
    {
        "$lookup": {
            "from": "media", // <-- collection to join
            "localField": "media",
            "foreignField": "_id",
            "as": "media_joined"
        }
    },
    { "$unwind": "$media_joined" },
    {
        "$group": {
            "_id": "$media_joined.project_code",
            "total": { "$sum": "$media_joined.amount" }
        }
    }
], function(err, result){
    console.log(result);
})
models.Project.aggregate([
{“$unwind”:“$media”},
{
“$lookup”:{

“from”:“media”,//不清楚预期结果是什么。你能详细说明一下吗?谢谢!如果我能投票100次,我会的。很好的解释,代码第一次就可以工作。我关注mongo问题,我看到你在这个主题上回答了很多问题。你在那里工作吗?:)@nurgasemetey No:)刚刚对这项技术产生了浓厚的兴趣,并且是其他人关于问题和技术帮助的热心支持者。