如何聚合 MongoDB 嵌套查询?
How to Aggregate MongoDB Nested Query?
所以我一直在尝试聚合两组特定的文档很长一段时间,但直到现在都没有成功。
我的文件是:
文档 1:
{
"_id": {
"$oid": "606d68e88346778f70f14b50"
},
"user": 123,
"task1": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task2": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task3": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
}
}
文档 2:
{
"_id": {
"$oid": "606d68fe8346778f70f14b51"
},
"user": 123,
"task1": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task2": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task3": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
}
}
我想做的是汇总所有文档中所有特征的分数。例如:
我的灵性在文档1中出现了3次,如果我总结一下,我在文档1中得到3分,在文档2中再次得到3分,总计6分。
预期的输出应该是:
{"user":123,"Humor":0,"Spirituality":6,"Fairness":0}
我一直在尝试不同的方法,但到目前为止都无济于事。非常感谢您的帮助。
演示 - https://mongoplayground.net/p/RV8W9t6zERq
$group
by userid
并将任务推送给个人 task1、task2、task3 数组
在第二个管道中$project
合并成一个tasks
数组
在第 3 个管道中获取总和
db.collection.aggregate([
{ $group: { _id: "$user", task1: { $push: "$task1" }, task2: { $push: "$task2" }, task3: { $push: "$task3" } } },
{ $project: { _id: 0, userId: "$_id", tasks: { "$concatArrays": ["$task1", "$task2", "$task3"] }} },
{ $project: { userId: 1, "Spirituality": { $sum: "$tasks.Spirituality" }, "Humor": { $sum: "$tasks.Humor" }, "Fairness": { $sum: "$tasks.Fairness" } }
}
])
所以我一直在尝试聚合两组特定的文档很长一段时间,但直到现在都没有成功。 我的文件是: 文档 1:
{
"_id": {
"$oid": "606d68e88346778f70f14b50"
},
"user": 123,
"task1": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task2": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task3": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
}
}
文档 2:
{
"_id": {
"$oid": "606d68fe8346778f70f14b51"
},
"user": 123,
"task1": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task2": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
},
"task3": {
"Humor": 0,
"Spirituality": 1,
"Fairness": 0
}
}
我想做的是汇总所有文档中所有特征的分数。例如: 我的灵性在文档1中出现了3次,如果我总结一下,我在文档1中得到3分,在文档2中再次得到3分,总计6分。
预期的输出应该是:
{"user":123,"Humor":0,"Spirituality":6,"Fairness":0}
我一直在尝试不同的方法,但到目前为止都无济于事。非常感谢您的帮助。
演示 - https://mongoplayground.net/p/RV8W9t6zERq
$group
by userid
并将任务推送给个人 task1、task2、task3 数组
在第二个管道中$project
合并成一个tasks
数组
在第 3 个管道中获取总和
db.collection.aggregate([
{ $group: { _id: "$user", task1: { $push: "$task1" }, task2: { $push: "$task2" }, task3: { $push: "$task3" } } },
{ $project: { _id: 0, userId: "$_id", tasks: { "$concatArrays": ["$task1", "$task2", "$task3"] }} },
{ $project: { userId: 1, "Spirituality": { $sum: "$tasks.Spirituality" }, "Humor": { $sum: "$tasks.Humor" }, "Fairness": { $sum: "$tasks.Fairness" } }
}
])