【问题标题】:MongoDB aggregation query on nested Json array objects嵌套 Json 数组对象的 MongoDB 聚合查询
【发布时间】:2017-01-11 23:09:54
【问题描述】:

我有一个 MongoDB,我想在数据库中查询一些值并将它们添加到条件匹配的地方。

这是我的收藏条目:

{
"_id" : ObjectId("5875ed1dc939408da0601f31"),
"AlbumName" : "Blurryface",
"Group" : "21 Pilots",
"Date" : "20151110",
"Label" : "Fueled By Ramen",
"Writers" : "Tyler Joseph",
"Producer" : "Mike Elizondo",
"Songlist" : [ 
    {
        "_id" : ObjectId("5875e5e8c939408da0601d73"),
        "SongID" : "1",
        "SongName" : "Stressed Out",
        "Artist" : "21 Pilots",
        "Duration:" : "200",
        "nPlays" : "800000000",
        "SongDataFile" : "data"
    }
]
}

我匹配 AlbumName 并希望获取“Songlist”中所有(如果有更多)歌曲的 nPlays

db.Albums.aggregate([
    {$match: {AlbumName: 'Blurryface'}},
    {$unwind: '$Songlist'},
])

但是现在我不知道如何从数组中的歌曲中获取 nPlay 以及如何将它们用于其他事情。

如何通过 MongoDB 聚合获得 nPlay?

【问题讨论】:

  • 我通过反复试验找到了答案。我在 unwind 下添加了这个:{$project: {nPlays: '$Songlist.nPlays'}}
  • 你好。如果您自己找到答案,您可以将其作为答案发布并接受。

标签: arrays json mongodb


【解决方案1】:

您可以使用 $group 阶段按 SongList 项的 id 对聚合进行分组,类似于以下内容:

db.Albums.aggregate([
    {$match: {AlbumName: 'Blurryface'}},
    {$unwind: '$Songlist'},
    {$group: {
        _id: '$_id',
        nPlays: {$first: '$nPlays'}
       }
     }
])

这将按 Song _id 对项目进行分组,这将产生一系列单独的歌曲及其 nPlay。看 $group

【讨论】:

  • 如果我想通过 SongName 来匹配这个例子,我们可以用它来搜索和拉取吗
猜你喜欢
  • 2021-08-13
  • 2018-09-10
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
相关资源
最近更新 更多