我有包含嵌套数组的集合。我需要根据以下条件获取数据:
empId : 19107
address.country: "AUS"
group.primaryGroup.primary:"Y"
group.subGroup.primarySubGroup.primary : "Y"
输入:
{
"empId": "19107",
"address": [
{
"street": "no.12 wilson street",
"country":"AUS"
},
{
"description": "No.32 watson street",
"country":"CAN"
}
],
"mobile": 2387468238,
"group": [
{
"groupId": 75227,
"primaryGroup": [
{
"primary": "Y"
},
{
"primary": "N"
}
],
"subGroup": [
{
"subGroupId": 123,
"primarySubGroup": [
{
"primary": "Y"
},
{
"primary": "N"
}
]
},
{
"subGroupId": 234,
"primarySubGroup": [
{
"primary": "N"
},
{
"primary": "Y"
}
]
}
]
}
]
}
我需要如下输出:
{
"empId": "19107",
"address": [
{
"street": "no.12 wilson street",
"country":"AUS"
}
],
"mobile": 2387468238,
"group": [
{
"groupId": 75227,
"primaryGroup": [
{
"primary": "Y"
}
],
"subGroup": [
{
"subGroupId": 123,
"primarySubGroup": [
{
"primary": "Y"
}
]
},
{
"subGroupId": 234,
"primarySubGroup": [
{
"primary": "Y"
}
]
}
]
}
]
}
下面给出了我尝试过的查询:
[{"$match" : {"empId":90, "address" : {"$elemMatch": {"country": {"$eq":"AUS"}}}, "group" :{"$elemMatch" : {"primaryGroup": {"$elemMatch" : {"primary": {"$eq": "Y"}}}, "subGroup" : {"$elemMatch" : { "primarySubGroup" : { "$elemMatch": {"primary" : {"$eq" : "Y"}}}}}}}}}, {"$project": {"empId":1, "mobile":1, "address": {"$filter" : {"input": "$address", "as": "d", "cond": {"$eq": ["$$d.country", "AUS"]}}} , "group" : {"$map": {"input": "$group", "as" : "v", "in": {"primaryGroup": {"$filter": {"input": "$$v.primaryGroup", "as": "vp", "cond": {"$eq": ["$$vp.primary", "Y"]}}}}}}, "subGroup": {"$map" : {"input": "$group", "as" : "n", "in": {"primarySubGroup" : {"$filter": {"input": "$$n.group", "as" : "mp", "cond": {"$eq": ["$$mp.primarySubGroup.primary", "830090"]}}}}}} }}]
我是 mongoDB 新手。我尝试了以下方法( Spring data Match and Filter Nested Array ),但我在嵌套数组获取中遇到一些问题。 例如:我需要比较组字段中存在的 $map 中的 PrimaryGroup,而不是 groupId。
你能帮我解决这个问题吗?提前致谢。
最佳答案
您可以使用以下查询。
我改变了一些事情。
1.单个条件不需要 $elemMatch
。请改用点表示法。
2.将子组的$map
移动到组的$map
运算符内。
[
{"$match":{
"empId":"19107",
"address.country":"AUS",
"group.primaryGroup.primary":"Y",
"group.subGroup.primarySubGroup.primary":"Y"
}},
{"$project":{
"empId":1,
"mobile":1,
"address":{"$filter":{"input":"$address","as":"d","cond":{"$eq":["$$d.country","AUS"]}}},
"group":{
"$map":{
"input":"$group",
"as":"v",
"in":{
"groupId":"$$v.groupId",
"primaryGroup":{"$filter":{"input":"$$v.primaryGroup","as":"vp","cond":{"$eq":["$$vp.primary","Y"]}}},
"subGroup":{
"$map":{
"input":"$$v.subGroup",
"as":"n",
"in":{
"subGroupId":"$$n.subGroupId",
"primarySubGroup":{"$filter":{"input":"$$n.primarySubGroup","as":"mp","cond":{"$eq":["$$mp.primary","Y"]}}}
}
}
}
}
}
}
}}
]
关于使用 $map 进行 MongoDB 嵌套数组搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48930247/