如何在 MongoDB 中的嵌套嵌入 object 上聚合
How to aggregate on nested embedded object in MongoDB
{
"_id": 1,
"title": {
header1:{ "name":"A" , age:10, "active":true},
header2:{ "name":"B" , age:15, "active":false},
header3:{ "name":"C" , age:20, "active":true},
header4:{ "name":"D" , age:30, "active":true},
header5:{ "name":"E" , age:35, "active":false},
header6:{ "name":"F" , age:40, "active":true},
header7:{ "name":"G" , age:45, "active":false},
}
}
如何只显示那些 headers 其活动值为 false 的?
$project
1.1 通过$objectToArray
for headers
字段将键值对转换为数组。
1.2 $filter
与 $$this.v.active
即 false
.
$project
2.1 通过$arrayToObject
将headers
转换为键值对并赋值给title
字段
db.collection.aggregate([
{
$project: {
_id: 1,
headers: {
$filter: {
"input": {
$objectToArray: "$title"
},
"cond": {
"$eq": [
"$$this.v.active",
false
]
}
}
}
}
},
{
$project: {
_id: 1,
title: {
"$arrayToObject": "$headers"
}
}
}
])
{
"_id": 1,
"title": {
header1:{ "name":"A" , age:10, "active":true},
header2:{ "name":"B" , age:15, "active":false},
header3:{ "name":"C" , age:20, "active":true},
header4:{ "name":"D" , age:30, "active":true},
header5:{ "name":"E" , age:35, "active":false},
header6:{ "name":"F" , age:40, "active":true},
header7:{ "name":"G" , age:45, "active":false},
}
}
如何只显示那些 headers 其活动值为 false 的?
$project
1.1 通过
$objectToArray
forheaders
字段将键值对转换为数组。 1.2$filter
与$$this.v.active
即false
.$project
2.1 通过
$arrayToObject
将headers
转换为键值对并赋值给title
字段
db.collection.aggregate([
{
$project: {
_id: 1,
headers: {
$filter: {
"input": {
$objectToArray: "$title"
},
"cond": {
"$eq": [
"$$this.v.active",
false
]
}
}
}
}
},
{
$project: {
_id: 1,
title: {
"$arrayToObject": "$headers"
}
}
}
])