【问题标题】:Group collection based on the common values of a field mongodb基于字段mongodb的公共值的分组集合
【发布时间】:2019-12-06 01:03:15
【问题描述】:

我的收藏是这样的

{
"email" : "tp@sd.com",
"subscriptions" : [
                {
                        "default" : false,
                        "interval" : "weekly",
                        "tags" : [
                                {
                                        "name" : "group-1",
                                        "value" : "g1-value-1"
                                },
                                {
                                        "name" : "group-1",
                                        "value" : "g1-value-2"
                                },
                                {
                                        "name" : "group-2",
                                        "value" : "g2-value-1"
                                },
                                {
                                        "name" : "group-3",
                                        "value" : "g3-value-1"
                                },
                                {
                                        "name" : "group-3",
                                        "value" : "g3-value-2"
                                }
                        ]
},
{
"email":"lol@xyz.com",
"subscriptions" : [
                {
                        "default" : false,
                        "interval" : "weekly",
                        "tags" : [
                                {
                                        "name" : "group-1",
                                        "value" : "g1-value-2"
                                },
                                {
                                        "name" : "group-1",
                                        "value" : "g1-value-1"
                                },
                                {
                                        "name" : "group-2",
                                        "value" : "g2-value-1"
                                },
                                {
                                        "name" : "group-2",
                                        "value" : "g2-value-3"
                                },
                                {
                                        "name" : "group-3",
                                        "value" : "g3-value-1"
                                }
                        ]
}

}

我想将它分组到一个包含电子邮件和公共组值的对象数组中。

例如,用户 1 有 g1-value-1,用户 2 也有 g1-value-1,可能还有其他值。但是这些用户应该与他们的标签一起分组。我如何实现这一目标?

【问题讨论】:

  • 你能告诉我你的样本输出是什么吗?如果我看到预期的输出,我可以让它工作。谢谢。

标签: javascript node.js mongodb


【解决方案1】:

令人惊讶的是,这是一个相当简单的查询:

db.collection.aggregate([
    {
        $unwind: "$subscriptions"
    },
    {
        $unwind: "$subscriptions.tags"
    },
    {
        $group: {
            _id: "$subscriptions.tags.value",
            emails: {$addToSet: "$email"}
        }
    }
]); 

结果将如下所示:

[
    {
        _id: "g1-value-1",
        emails: [
            "tp@sd.com",
            "lol@xyz.com"
        ]
    },
    {
        _id: "g1-value-2",
        emails: [
            "tp@sd.com",
            "lol@xyz.com"
        ]
    },
    {
        _id: "g2-value-1",
        emails: [
            "tp@sd.com",
            "lol@xyz.com"
        ]
    },
    {
        _id: "g2-value-3",
        emails: [
            "lol@xyz.com"
        ]
    },
    {
        _id: "g3-value-1",
        emails: [
            "tp@sd.com",
            "lol@xyz.com"
        ]
    },
    {
        _id: "g3-value-2",
        emails: [
            "tp@sd.com",
        ]
    },
]

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多