亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 MongoDB 的 Java 驅動程序將多個文檔合并為一個文檔?

如何使用 MongoDB 的 Java 驅動程序將多個文檔合并為一個文檔?

斯蒂芬大帝 2023-08-16 16:11:51
我正在處理包含音樂播放列表的文檔。每個文檔都有這樣的結構:{    "user_id": "5858",    "playlists": [        {            "name": "My Playlist",            "guild_ids": ["7575"],            "items": [                {                     "title": "title",                     "url": "url",                     "duration": 200000                }             ]        }    ]}我想提取同一公會的所有播放列表。但問題是我希望結果在單個文檔中返回。包含播放列表列表的一個文檔。guild_id=5656 的預期結果如下:{    "playlists": [        {            "name": "My Playlist",            "guild_ids": ["5656"],            "items": [                {                     "title": "title",                     "url": "url",                     "duration": 200000                }             ]        },        // other playlists where guild_ids contains "5656"    ]}我嘗試使用聚合,但我總是得到與唯一 user_ids 數量相同的文檔數量。我得到按 user_id 分組的播放列表。
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

以下查詢可以獲得預期的輸出:


db.collection.aggregate([

    {

        $unwind:"$playlists"

    },

    {

        $match:{

            "playlists.guild_ids":{

                $in:["7575"]

            }

        }

    },

    {

        $group:{

            "_id":null,

            "playlists":{

               $push: "$playlists"

            }

        }

    },

    {

        $project:{

            "_id":0

        }

    }

]).pretty()

數據集:


{

  "_id" : ObjectId("5d88225e38db7cf8d3f75cd6"),

  "user_id" : "5858",

  "playlists" : [

    {

      "name" : "My Playlist",

      "guild_ids" : [

        "7575"

      ],

      "items" : [

        {

          "title" : "title",

          "url" : "url",

          "duration" : 200000

        }

      ]

    }

  ]

}

{

  "_id" : ObjectId("5d88225e38db7cf8d3f75cd7"),

  "user_id" : "5858",

  "playlists" : [

    {

      "name" : "My Playlist 2",

      "guild_ids" : [

        "1234"

      ],

      "items" : [

        {

          "title" : "title",

          "url" : "url",

          "duration" : 200000

        }

      ]

    }

  ]

}

{

  "_id" : ObjectId("5d88225e38db7cf8d3f75cd8"),

  "user_id" : "5858",

  "playlists" : [

    {

      "name" : "My Playlist 3",

      "guild_ids" : [

        "7575"

      ],

      "items" : [

        {

          "title" : "title",

          "url" : "url",

          "duration" : 200000

        }

      ]

    }

  ]

}

輸出:


{

    "playlists" : [

        {

            "name" : "My Playlist",

            "guild_ids" : [

                "7575"

            ],

            "items" : [

                {

                    "title" : "title",

                    "url" : "url",

                    "duration" : 200000

                }

            ]

        },

        {

            "name" : "My Playlist 3",

            "guild_ids" : [

                "7575"

            ],

            "items" : [

                {

                    "title" : "title",

                    "url" : "url",

                    "duration" : 200000

                }

            ]

        }

    ]

}

查詢分析:我們正在展開playlists,僅過濾具有7575公會ID的那些,然后將它們重新分組。


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號