mongodb:将上一个管道结果的数组引用到下一个管道中
Posted
技术标签:
【中文标题】mongodb:将上一个管道结果的数组引用到下一个管道中【英文标题】:mongodb: Reference previous pipeline result's array into next pipeline 【发布时间】:2018-10-08 01:57:24 【问题描述】:我正在使用聚合管道。
const pipeline = [
$match: query // first pipeline stage
]
这将给出以下结果:
"_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", “得分”:80,“观看次数”:100
"_id" : ObjectId(“512bc962e835e68f199c8687”),“作者”:“戴夫”,“分数”:85, “浏览量”:521
我想将此管道结果(在本例中为数组)简化为一个对象。我知道,我们可以通过项目减少
第二个流水线阶段:
$project:
results:
$reduce:
input: <array>, // We have $$ROOT, but I need previous pipeline result
initialValue: <expression>,
in: <expression>
我们如何将先前的管道结果作为数组引用到此管道阶段?
【问题讨论】:
一般只需要在reduce的输入栏输入$name_of_your_array
即可。它将采用最后一个管道阶段的结果
显示您实际在做什么。你几乎可以肯定没有清楚地表达你需要在这里做什么。更容易 1. 显示一些源数据 2. 从该数据中显示所需的结果 3. 迄今为止您的尝试中使用的聚合管道。这是可以回答的。
如果问题不清楚,请告诉我。
【参考方案1】:
你必须使用 CURRENT
$project:
results:
$reduce:
input: $$CURRENT,
initialValue: <expression>,
in: <expression>
【讨论】:
docs.mongodb.com/manual/reference/aggregation-variables【参考方案2】:你的意思是$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 数据库有所了解,还可以查看 SQL to Aggregation Mapping Chart。
【讨论】:
以上是关于mongodb:将上一个管道结果的数组引用到下一个管道中的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用