MongoDB按数组字段中的值分组

Sri*_*ula 5 mongodb aggregation-framework

我有以下格式的资产文件。

db.asset.find({}).limit(1).pretty()
{
    "_id" : ObjectId("54e650a10364a65f62c0df4a"),
    "_class" : "com.model.core.Asset",
    "displayName" : "Bingo Rhymes For Children + More 3D Animation Nursery Rhymes & Kids' Songs",
    "assetType" : "VIDEO",
    "active" : true,
    "originalUrl" : "https://www.youtube.com/watch?v=j-tdVvvXn9k&feature=youtube_gdata",
    "groupIds" : [ ],
    "folderIds" : [
        "54e6507b0364a65f62c0df47",
        "54e6507b0364a65f62c0df48"
    ]
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,每个资产都可以有一个与之关联的 folderId 集合。如果我想找到 folderIds 以及关联的资产,mongo 聚合查询会是什么样子?基本上我想按folderId对资产进行分组。

ser*_*iuz 7

您首先需要按字段展开folderIds,然后按分组_id并将资产推送到_id列表中assets_id

db.asset.aggregate([{$unwind:"$folderIds"},  {$group:{_id: "$folderIds",assets:{$push: {assets_id:"$_id"}}}}])
Run Code Online (Sandbox Code Playgroud)