如何过滤子数组但保留根内容?
How to filter a sub array but keep the root content?
使用 mongo 3.6
我有一个顶级对象,其属性包含内容数组。
{
firstName: "first1",
lastName: "last1",
phones: [
{
name: "home",
number: "1800"
},
{
name: "work",
number: "1888"
}
]
}
我只想 return 'work' phone 数字,但保留根内容。
预期结果为:
{
firstName: "first1",
lastName: "last1",
phones: [
{
name: "work",
number: "1888"
}
]
}
用例是 return 服用特定药物的患者,但只有 return 这些药物,而不是完整的药物清单。
所以我尝试了这个:
{
$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"
}
]
}
使用 mongo 3.6
我有一个顶级对象,其属性包含内容数组。
{
firstName: "first1",
lastName: "last1",
phones: [
{
name: "home",
number: "1800"
},
{
name: "work",
number: "1888"
}
]
}
我只想 return 'work' phone 数字,但保留根内容。
预期结果为:
{
firstName: "first1",
lastName: "last1",
phones: [
{
name: "work",
number: "1888"
}
]
}
用例是 return 服用特定药物的患者,但只有 return 这些药物,而不是完整的药物清单。
所以我尝试了这个:
{
$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"
}
]
}