目前我正在尝试使用2个集合。一个是问题集合,另一个是答案集合。 问题集合中的文档包含每个问题的标记。当答案文档不包含标记字段时,如何在每个标记下查找答案的数量?
db.collection.distinct(" tags:")是我必须在Questions集合中找到标签
问题示例:
_id: ObjectId("5a7c8c30f1557ea7894e553d")
title:"Incididunt dolore laboris ut officia nisi."
tags: Array
body:"Lorem deserunt cillum aliqua fugiat. Qui sit veniam voluptate aliqui"
author:"testAuthor"
votes:Array
status:"UNANSWERED"
time:1277144388539
答案示例:
"_id":"5a7c8ffcd117b014dc0c0e25",
"body":"asalkdjalksjlkdjsaljdas",
"author":"testAuthor",
"time":"1518112764502",
"accepted":false,
"votes":[],
"question":"ObjectId(5a7c8d0ad117b00d6492211d)"
答案 0 :(得分:1)
您可以尝试以下聚合:
db.Questions.aggregate([
{
$lookup: {
from: "Answers",
localField: "_id",
foreignField: "question",
as: "answers"
}
},
{
$project: {
tags: 1,
total_answers: { $size: "$answers" }
}
},
{
$unwind: "$tags"
},
{
$group: {
_id: "$tags",
total: { $sum: "$total_answers" }
}
}
])
$lookup只是从另一个集合中插入一组匹配的文档。然后我们可以计算每个问题的所有答案($size返回一个数组的长度)。要按$group标记,我们需要提前$unwind。