MongoDB过滤文档并只返回匹配的子文档(如果存在),否则为null或空数组或空对象



我需要在我的项目中实现搜索/筛选。我是mongodb的新手。我需要所有与名称匹配的文档,如果有一个子文档与sID匹配,那么只有该子文档应该在子文档数组中投影。

但应该显示与名称匹配的两个文档。是否有匹配的子文档并不重要。

我的对象是这样的:

[
{
"name" : "abcd",
"education" : [
{"sId" : 3233, "sName" : "XYZ"},
{"sId" : 3244, "sName" : "SIO"}
]
},
{
"name" : "abcd",
"education" : [
{"sId" : 3254, "sName" : "HDY"},
{"sId" : 3245, "sName" : "UYT"}
]
},
{
"name" : "qwerty",
"education" : [
{"sID" : 2212, "sName" : "SKJ"},
{"sID" : 2133, "sName" : "SKJ"}
]
},
{
"name" : "qwerty",
"education" : [
{"sID" : 2322, "sName" : "POS"},
{"sID" : 1122, "sName" : "POS"}
]
}
]

当我搜索{"name":"abcd","sID":3244}时

然后输出应该像:

[
{
"name" : "abcd",
"education" : [
{"sId" : 3244, "sName" : "SIO"}
]
},
{
"name" : "abcd",
"education" : []
}
]

提前谢谢。

我会使用一个带有过滤器的匹配和项目来匹配您想要匹配元素的查询。

示例:

collection.aggregate([ 
{
$match: {
name : "abcd"
}
},
{ 
$project :  {
name :1,
education: {
$filter: {
input: "$education",
as: "item",
cond: { $eq: [ "$$item.sId", 3244] }
}
}
}
}
])

最新更新