gpt4 book ai didi

MongoDB 管道聚合将值加在一起

转载 作者:可可西里 更新时间:2023-11-01 09:57:13 24 4
gpt4 key购买 nike

所以我想在 MongoDB 中使用管道聚合来从文档中查询某些值,然后将它们相加。

我的“相册”文档。

{
"_id" : ObjectId("5875ed1dc939408da0601f31"),
"AlbumName" : "Blurryface",
"Artist" : "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",
"Album" : "Blurryface",
"Duration:" : "200",
"nPlays" : 800000000,
"SongDataFile" : "data"
},
{
"_id" : ObjectId("5875e855c939408da0601dcc"),
"SongID" : "4",
"SongName" : "Heathens",
"Artist" : "21 Pilots",
"Album" : "Blurryface",
"Colaborator" : "NA",
"Duration:" : "320",
"nPlays" : 5000000,
"SongDataFile" : "data"
}
]
}

我如何制作一个聚合管道,从数组中的歌曲中提取“nPlays”,然后将它们加在一起?

我在这里问是因为关于 MongoDB 的文档不够好,而且他们没有关于如何一起使用运算符的示例。除此之外,谷歌上的所有示例仅查询 $gt $lt 或使用仅使用 $match 和 $group 的相同示例,这根本无法帮助我解决我的问题。

简而言之:

如何提取“nPlays”并将它们添加到管道聚合中?

最佳答案

您必须展开内部文档。此操作为 Songlist 字段中的每个子文档创建一个文档。

生成的聚合管道如下:

db.Albums.aggregate([
{$unwind: {path: "$Songlist"}},
{$project : { "_id" : 0, "AlbumName" : 1, "Songlist.nPlays" : 1} },
{$group : {"_id" : "$AlbumName", "sum" : {"$sum" : "$Songlist.nPlays"}}}
])

结果文档是这样的:

{
"_id" : "Blurryface",
"sum" : 805000000
}

总而言之,使用$unwind 操作可以展平 内部子文档。然后,通过一个简单的 $project,您可以只保留您需要的字段(这个阶段是可选的)。最后,使用 $group,您可以汇总所需的信息。

希望对您有所帮助。

关于MongoDB 管道聚合将值加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com