使用mongo 3.6
我有一个顶级对象,其属性包含内容数组。
{
firstName: "first1",
lastName: "last1",
phones: [
{
name: "home",
number: "1800"
},
{
name: "work",
number: "1888"
}
]
}
我只想返回“工作”电话号码,但保留根内容。
预期结果是:
{
firstName: "first1",
lastName: "last1",
phones: [
{
name: "work",
number: "1888"
}
]
}
用例是返回正在服用特定药物的患者,但仅返回这些药物而不是完整的药物列表。
所以我尝试了这个:
{
$project: {
phones: {
$filter: {
input: "$phones",
as: "phones",
cond: {
$eq: [
"$$phones.name",
"work"
]
}
}
}
}
}
我必须经常这样做才能删除子数组的元素,因此我们将不胜感激。
最佳答案
以下查询可以获得预期的输出:
db.collection.aggregate([
{
$addFields:{
"phones":{
$filter:{
"input":"$phones",
"as":"phone",
"cond":{
$eq:["$$phone.name","work"]
}
}
}
}
}
]).pretty()
输出:
{
"_id" : ObjectId("5d56d6c632ac518eee84d462"),
"firstName" : "first1",
"lastName" : "last1",
"phones" : [
{
"name" : "work",
"number" : "1888"
}
]
}
关于mongodb - 如何过滤子数组但保留根内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57527925/