簡體   English   中英

基於字段mongodb的共同值的分組集合

[英]Group collection based on the common values of a field mongodb

我的收藏看起來像這樣

 { "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,可能還有其他值。 但是這些用戶應該與他們的標簽一起分組。 我如何實現這一目標?

令人驚訝的是,這是一個非常簡單的查詢:

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",
        ]
    },
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM