我有这份文件的结构:
{
Id: "id_value",
Elements:[
{
InnerId: "inner_id_value1",
Value: "apple"
},
{
InnerId: "inner_id_value2",
Value: "pear"
},
{
InnerId: "inner_id_value3",
Value: "banana"
}
]
}
我需要做的是创建一个查询,在输入中接收一个数组(例如["apple","banana","coconut"]
)并返回给我:
{
Id: "id_value",
Elements:[
{
InnerId: "inner_id_value1",
Value: "apple"
},
{
InnerId: "inner_id_value3",
Value: "banana"
}
]
}
是否可以使用单个查询在Mongo中执行此操作?
答案 0 :(得分:3)
您只需要$filter
数组并仅保留值是输入数组子集的子文档。请注意, value 这里是一个元素数组,其中element是嵌入字段value
。
let fruits = ["apple","banana","coconut"];
db.collection.aggregate([
{ "$project": {
"Element": {
"$filter": {
"input": "$Element",
"as": "el",
"cond": {
"$setIsSubset": [ [ "$$el.Value" ], fruits ]
}
}
}
}}
])
从MongoDB 3.4 *开始,您可以在$in
阶段使用$project
运算符。
db.collection.aggregate([
{ "$project": {
"Element": {
"$filter": {
"input": "$Element",
"as": "el",
"cond": {
"$in": [ "$$el.Value", fruits ]
}
}
}
}}
])
*撰写本文时尚未发布的MongoDB版本