MongoDB中数组值的唯一联合

时间:2015-11-13 15:39:18

标签: mongodb mongodb-query

我有一组文档,其中每个文档都有一系列主题。我希望能够找到user_id在列表中的唯一主题。

示例文档存储:

{
    "user_id" : "1",
    "subjects" : [
        123,
        456,
        789
    ]
}
{
    "user_id" : "2",
    "subjects" : [
        789,
        111,
        555
    ]
}
{
    "user_id" : "3",
    "subjects" : [
        123,
        111
    ]
}

所以我可能想要user_id所在的所有唯一主题(1,2),结果将是:

{
    "subjects" : [
        123,
        456,
        789,
        111,
        555
    ]
}

我将如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

您可以使用distinct查询执行此操作:

db.test.distinct('subjects', {user_id: {$in: ['1', '2']}})

第一个参数是获取不同值的字段,第二个参数选择执行此操作的文档。

答案 1 :(得分:0)

db.test.aggregate(
    {
        $match: // filters results based on the list of IDs
        {
            user_id: { $in: [ "1", "2" ] }
        }
    },
    {
        $unwind: "$subjects" // unwinds the `subjects` array
    },
    {
        $group: // groups the unwound elements back into a single array
        {
            _id: 1,
            subjects: { $addToSet: "$subjects" }
        }
    },
    {
        $project: { subjects: 1, _id: 0 }
    }
)

将返回:

{ "subjects" : [ 555, 111, 789, 456, 123 ] }