2015-10-14 75 views
2

我的资产文档采用以下格式。MongoDB组按数组字段中的值

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的集合。如果我想查找文件夹标识以及关联的资产,mongo聚合查询的外观如何?基本上我想通过folderId将资源分组。

+0

目前还不清楚你在这里问什么。你想做什么?预期的结果是什么? – styvane

+0

@ user3100115本质上,我想通过folderId将资源分组。 –

回答

2

您首先需要通过folderIds字段进行展开,而不是通过_id进行展示,并将资产_id推入列表assets_id

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

我想这会让我得到folderId和assetId的一对一关联。这是您建议查询的结果。 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“)} }。我可以为每个folderId获取assetIds组合在一起吗? –

+0

谢谢,但新的查询不会返回任何结果。 –

+0

请参阅我的更正,我更正了我的答案。 – sergiuz