在MongoDB中,按数组字段中的值进行分组

5
我有以下格式的资产文件。
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"
    ]
}

正如您所看到的,每个资产都可以有一组与其相关联的folderId。如果我想查找与关联资产一起的文件夹ID,那么Mongo聚合查询应该是什么样子的?基本上,我想按folderId对资产进行分组。


您在此提问的内容不明确。您想要做什么?期望得到什么结果? - styvane
@user3100115 本质上,我想按文件夹ID对资产进行分组。 - Srini Kandula
1个回答

7

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

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

我认为这可以让我获得文件夹ID与资产ID之间的一对一关联。以下是您建议的查询的结果。db.asset.aggregate([{$unwind:"$folderIds"}, {$group:{_id:{"folderIds":"$folderIds","asset_id":"$_id"}}}]) { "_id" : { "folderIds" : "54f8a2ed0364edbff0152df3", "asset_id" : ObjectId("55a53cfd93861c7d709af3c7") } } { "_id" : { "folderIds" : "54f8a2ed0364edbff0152df3", "asset_id" : ObjectId("552ff98d9386ca008fe2464c") } }。我能否将每个文件夹ID的资产ID分组在一起? - Srini Kandula
谢谢您,但新的查询没有返回任何结果。 - Srini Kandula
1
谢谢。这个可以用。db.asset.aggregate([{$unwind:"$folderIds"}, {$group:{_id: "$folderIds",assets:{$push: {assets_id:"$_id"}}}}]) - Srini Kandula

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