database - Mongodb聚合如何合并这个子文档的子文档?
问题描述
我想结合这些数据,这两个数据具有相同的根_id,并且视频字段具有相同的songs._id 值。最后,我想将具有相同 song._id 的视频数据合并到相同歌曲数据和相同根目录下的视频数组,我的意思是,
[
{
"_id": ObjectId("5e328f15b7e4937f52c67679"),
"name": "HoYoung",
"like": 0,
"view": 0,
"songs": {
"_id": "32f3156c-ed37-40dc-af96-dcbf53a84a58",
"name": "testName",
"lyrics": "testLyrics",
"like": 0,
"video": {
"_id": "1255c77b-f3f6-466a-bd1a-0124555e5592",
"like": 0,
"view": 0
}
}
},
{
"_id": ObjectId("5e328f15b7e4937f52c67679"),
"name": "HoYoung",
"like": 0,
"view": 0,
"songs": {
"_id": "32f3156c-ed37-40dc-af96-dcbf53a84a58",
"lyrics": "testLyrics",
"like": 0,
"name": "testName",
"video": {
"_id": "f08a433a-e120-459f-8bf1-1f55081dbf82",
"like": 0,
"view": 0
}
}
}
]
至
{
"_id" : ObjectId("5e328f15b7e4937f52c67679"),
"name" : "HoYoung",
"like" : 0
"songs" : {
"_id" : "32f3156c-ed37-40dc-af96-dcbf53a84a58",
"name" : "testName",
"lyrics" : "testLyrics",
"like" : 0,
"view" : 0,
"video" : [{
"_id" : "1255c77b-f3f6-466a-bd1a-0124555e5592",
"like" : 0,
"view" : 0
},{
"_id" : "f08a433a-e120-459f-8bf1-1f55081dbf82",
"like" : 0,
"view" : 0
}]
}
}
我怎样才能做到这一点?团体?问题是我不能对子文档的子文档进行分组
解决方案
您需要$group
通过songs._id
(并在您的上下文中根)并在时间数组_id
中累积video
子文档(我们存储在顶级文档中以在下一阶段合并)。video
root
db.collection.aggregate([
{
$group: {
_id: "$songs._id",
root: {
$first: "$$ROOT"
},
video: {
$push: "$songs.video"
}
}
},
{
$project: {
name: "$root.name",
like: "$root.like",
songs: {
_id: "$root.songs._id",
name: "$root.songs.name",
lyrics: "$root.songs.lyrics",
like: "$root.songs.like",
view: "$root.songs.view",
video: "$video"
}
}
}
])
推荐阅读
- python - How do I exclude the last line of user input?
- c - CMake:另一个具有相同名称的目标存在于一个链接库中
- excel - 无法使用 vba 解析网页中某个项目的特定值
- javascript - 可以为 urql 设置自定义标题吗?
- ios - Xcode 项目在加载设备上崩溃
- linux - POSIX 字符在 CodeBuild 服务器上不起作用
- html - 跨越页面的表格单元格会失去其顶部和底部的 obrders
- git - 只能从远程 git 存储库中拉一次
- kotlin - Kotlin + let 方法 + this 关键字
- android - 安卓中的日期选择器