Node.js mongodb:参考以前的管道结果';将阵列插入下一个管道

Node.js mongodb:参考以前的管道结果';将阵列插入下一个管道,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用聚合管道 const pipeline = [ { $match: query } // first pipeline stage ] 这将产生以下结果: {“_id”:ObjectId(“512bc95fe835e68f199c8686”),“作者”:“dave”, “分数”:80,“视图”:100} {“_id”: ObjectId(“512bc962e835e68f199c8687”),“作者”:“dave”,“分数”:85, “视图

我正在使用聚合管道

 const pipeline = [
                    { $match: query } // first pipeline stage
 ]
这将产生以下结果:

{“_id”:ObjectId(“512bc95fe835e68f199c8686”),“作者”:“dave”, “分数”:80,“视图”:100}

{“_id”: ObjectId(“512bc962e835e68f199c8687”),“作者”:“dave”,“分数”:85, “视图”:521}

我想将这个管道结果(在本例中是一个数组)简化为一个对象。我知道,我们可以通过项目来减少成本

第二管道阶段:

{
$项目:{
结果:{
美元减少:{
输入:,//我们有$$ROOT,但我需要以前的管道结果
初始值:,
在:
}
}
}
我们如何将以前的管道结果作为数组引用到此管道阶段?您的意思是

这将根据
“author”
字段“分组”,该字段位于
\u id
中,并使用“累加器”返回其他属性,例如


有关更多信息,我建议您查看官方文档中显示了许多示例的部分,以及如果您对SQL数据库有一定的了解,请参阅

{
  $project: {
   results: {
    $reduce: {
        input: $$CURRENT, 
        initialValue: <expression>,
        in: <expression>
    }
   }
}
{
$项目:{
结果:{
美元减少:{
输入:$$CURRENT,
初始值:,
在:
}
}
}

通常,您只需在reduce的输入字段中输入您的数组的
$name\。它将获取最后一个管道阶段的结果显示您实际在做什么。您几乎肯定无法清楚地表达您在这里需要做什么。更容易1.显示一些源数据2.显示来自该数据的所需结果3.聚合pip到目前为止,eline在你的尝试中使用了。这是可以回答的。如果问题不清楚,请告诉我。
db.collection.aggregate([
  { "$match": { ... } },  // your query conditions
  { "$group": { 
    "_id": "$author",
    "score": { "$sum": "$score" },
    "views": { "$sum": "$views" }
  }}
])
{ "_id" : "dave", "score" : 165, "views" : 621 }
{
  $project: {
   results: {
    $reduce: {
        input: $$CURRENT, 
        initialValue: <expression>,
        in: <expression>
    }
   }
}