如何解决展平嵌套的JSON结构并在mongoDB聚合中追加属性名称
{
"testing": {
"total": 360,"status": "testing","books": [
{
"book": "john goes to school","authors": [
"john@gmail.com"
]
}
],},"dev": {
"total": 863,"status": "dev","books": [
{
"book": "bob makes a book","authors": [
"bob@gmail.com",]
}
]
},"prod": {
"total": 1,"status": "prod","flags": [
{
"book": "nancy writes an essay","authors": [
"nancy@gmail.com"
]
}
]
}
}
]
我想把它展平成这样:
{
"books":[
{
"book":"john goes to school","authors":[
"john@gmail.com"
],"status":"testing"
},{
"book":"bob makes a book","authors":[
"bob@gmail.com"
],"status":"dev"
},{
"book":"nancy writes an essay","authors":[
"nancy@gmail.com"
],"status":"prod"
}
]
}
到目前为止,我要使它看起来最接近的最好方法就是使用它
db.collection.aggregate([
{
$project: {
_id: 0,dev: "$dev.books",test: "$test.books",prod: "$prod.books"
}
}
我尝试使用$ unwind,$ map和$ reduce的组合,但不确定如何理解它。基本上,我一直在尝试展平数组,并将状态附加到每个记录 任何帮助将不胜感激,谢谢
解决方法
尝试此汇总-
db.collection.aggregate([
{
"$match": {
"_id": 0
}
},{
"$project": {
"_id": 0
}
},{
"$project": {
"arr": {
"$objectToArray": "$$ROOT"
}
}
},{
"$unwind": "$arr"
},{
"$set": {
"arr.v.books.status": "$arr.v.status"
}
},{
"$group": {
"_id": "$_id","books": {
"$addToSet": "$arr.v.books"
}
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。