[英]Group documents based on field on another collection Mongodb
我有 3 個 collections
測驗
[
{
"_id": 1,
"name": "quiz1",
"tags": "tag1",
},
{
"_id": 2,
"name": "quiz2",
"tags": "tag1"
}
]
用戶
{
"_id": 1,
"name": "Mike"
}
答案
[
{
_id: 1,
"relatedUser": 1,
"relatedQuiz": 1,
"result": 10
},
{
_id: 1,
"relatedUser": 1,
"relatedQuiz": 2,
"result": 20
}
]
並且需要 Result 是
{
"tags": "tag1",
"relatedUser": "Mike",
"totalResult": 30
}
您可以在answers
集合上使用聚合管道來獲得所需的結果。
$lookup
階段開始,為answers
集合中的每個文檔獲取測驗標簽。$unwind
階段為每個測驗文檔返回 output 文檔。$group
階段,通過relatedUser
和quiz.tags
字段對文檔進行分組,並使用$sum
計算result
的總和。$lookup
階段以從users
集合中獲取用戶文檔。$unwind
階段為每個用戶文檔返回 output 文檔。$project
階段結束以返回您感興趣的字段。db.answers.aggregate([
{
$lookup: {
from: 'quizzes',
localField: 'relatedQuiz',
foreignField: '_id',
as: 'quiz',
},
},
{
$unwind: '$quiz',
},
{
$group: {
_id: {
userId: '$relatedUser',
tags: '$quiz.tags',
},
score: {
$sum: '$result',
},
},
},
{
$lookup: {
from: 'users',
localField: '_id.userId',
foreignField: '_id',
as: 'user',
},
},
{
$unwind: '$user',
},
{
$project: {
_id: 0,
tags: '$_id.tags',
relatedUser: '$user.name',
totalResult: '$score',
},
},
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.