根据另一个集合

时间:2018-02-08 18:12:51

标签: mongodb mongodb-query

目前我正在尝试使用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)"

1 个答案:

答案 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