如何在数组元素中使用mongodb投影查询
How to use mongodb projection query in array elements
我只想在菜单中投影“type”:“A”。有办法实现吗?
"_id" : "1",
"menu" : [
{
"type" : "A",
"items" : [
{
"key" : "Add",
"enabled" : true,
} ]
},
{
"type" : "B",
"items" : [
{
"key" : "Add",
"enabled" : true,
} ]
}
]
}
如果你只想输出类型为 A 的菜单,你可以在查找查询中使用 $elemMatch
(注意,因为这只是 return 第一个匹配的元素)
db.collection.find({},
{
"menu": {
"$elemMatch": {
"type": "A"
}
}
})
示例here
或聚合查询中的$filter
(这returns数组中具有type: "A"
的所有对象):
db.collection.aggregate([
{
"$project": {
"menu": {
"$filter": {
"input": "$menu",
"cond": {
"$eq": [
"$$this.type",
"A"
]
}
}
}
}
}
])
示例here
我只想在菜单中投影“type”:“A”。有办法实现吗?
"_id" : "1",
"menu" : [
{
"type" : "A",
"items" : [
{
"key" : "Add",
"enabled" : true,
} ]
},
{
"type" : "B",
"items" : [
{
"key" : "Add",
"enabled" : true,
} ]
}
]
}
如果你只想输出类型为 A 的菜单,你可以在查找查询中使用 $elemMatch
(注意,因为这只是 return 第一个匹配的元素)
db.collection.find({},
{
"menu": {
"$elemMatch": {
"type": "A"
}
}
})
示例here
或聚合查询中的$filter
(这returns数组中具有type: "A"
的所有对象):
db.collection.aggregate([
{
"$project": {
"menu": {
"$filter": {
"input": "$menu",
"cond": {
"$eq": [
"$$this.type",
"A"
]
}
}
}
}
}
])
示例here