2015-10-14 76 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