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>
}
}
}