【问题标题】:MongoDB group by values in an array fieldMongoDB按数组字段中的值分组
【发布时间】:2015-10-14 19:59:45
【问题描述】:

我的资产文件采用以下格式。

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"
    ]
}

如您所见,每个资产都可以拥有与其关联的文件夹 ID 的集合。如果我想找到 folderIds 以及相关的资产,mongo 聚合查询会是什么样子?本质上,我想按 folderId 对资产进行分组。

【问题讨论】:

  • 不清楚你在这里问什么。你想做什么?预期的结果是什么?
  • @user3100115 基本上我想按folderId对资产进行分组。

标签: mongodb aggregation-framework


【解决方案1】:

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

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

【讨论】:

  • 我认为这让我获得了 folderId 与 assetsId 的一对一关联。这是您建议的查询的结果。 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 组合在一起吗?
  • 谢谢,但是新查询没有返回任何结果。
  • 谢谢。这行得通。 db.asset.aggregate([{$unwind:"$folderIds"}, {$group:{_id:"$folderIds",assets:{$push: {assets_id:"$_id"}}}}])跨度>
猜你喜欢
  • 2014-05-20
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多