展平嵌套JSON结构并在mongoDB聚合中追加属性名
我有一个这样的物体展平嵌套JSON结构并在mongoDB聚合中追加属性名,mongodb,aggregate,Mongodb,Aggregate,我有一个这样的物体 { "testing": { "total": 360, "status": "testing", "books": [ { "book": "john goes to school", "authors": [
{
"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和$REDUCT的组合,但不确定如何理解它。基本上,我一直在尝试展平数组,并将状态附加到每条记录中
如果您有任何帮助,我们将不胜感激,谢谢您尝试此聚合-
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"
}
}
}
])
这里是这很有效。Mongo 3的$set stage等价物是多少?感谢bunchTry$addFields而不是$set