MongoDB中数组值的唯一联合

3
我有一组文档,每个文档都有一个主题数组。我想要能够找到其中唯一的主题,其中用户ID在列表中。
示例文档存储:
{
    "user_id" : "1",
    "subjects" : [
        123,
        456,
        789
    ]
}
{
    "user_id" : "2",
    "subjects" : [
        789,
        111,
        555
    ]
}
{
    "user_id" : "3",
    "subjects" : [
        123,
        111
    ]
}

所以我想要所有唯一的主题,其中用户ID在(1,2)中,结果将是:

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

如何实现这个?
2个回答

2
您可以使用“distinct”查询来实现此操作:

distinct

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

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

哈!我没意识到distinct会合并数组!这比我的解决方案好多了! - Dmytro Shevchenko
2
@DmytroShevchenko 是的,它比起一开始看起来更具有灵活性的命令。 - JohnnyHK

1
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 ] }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接