mongodb:将前一个管道结果的数组引用到下一个管道中

时间:2018-04-27 08:51:16

标签: node.js mongodb mongoose

我正在使用聚合管道。

{
  $project: {
   results: {
    $reduce: {
        input: <array>, // We have $$ROOT, but I need previous pipeline result
        initialValue: <expression>,
        in: <expression>
    }
   }
}

这将得到以下结果:

  

{“_ id”:ObjectId(“512bc95fe835e68f199c8686”),“author”:“dave”,   “得分”:80,“观点”:100}

     

{“_ id”:   ObjectId(“512bc962e835e68f199c8687”),“作者”:“dave”,“得分”:85,   “观点”:521}

我想将此管道结果(在这种情况下是一个数组)减少到一个对象中。我知道,我们可以通过项目来减少

第二个管道阶段:

brew install chromedriver

我们如何将以前的管道结果作为数组引用到此管道阶段?

2 个答案:

答案 0 :(得分:0)

你的意思是$group

db.collection.aggregate([
  { "$match": { ... } },  // your query conditions
  { "$group": { 
    "_id": "$author",
    "score": { "$sum": "$score" },
    "views": { "$sum": "$views" }
  }}
])

这会“放置”放置在"author"中的_id字段并使用“累加器”返回其他属性,例如$sum

{ "_id" : "dave", "score" : 165, "views" : 621 }

有关详细信息,我建议查看显示大量示例的官方文档的Aggregation部分,以及SQL to Aggregation Mapping Chart,如果您对SQL数据库有一定的了解。

答案 1 :(得分:0)

您必须使用CURRENT

{
  $project: {
   results: {
    $reduce: {
        input: $$CURRENT, 
        initialValue: <expression>,
        in: <expression>
    }
   }
}