我有个Json:
{
"_id": {
"$oid": "613a55dccXXXXXXX28b5ba3a1"
},
"user": "CHEWBACCA",
"paymentTypes": [{
"type": "PILOT",
"limits": [{
"type": "FLIGHT_HOURS",
"amount": 10
},
{
"type": "COMBAT_HOURS",
"amount": 80000
},
{
"type": "TRAINING_HOURS",
"amount": 80000
}
]
},
{
"type": "WARRIOR",
"limits": [{
"type": "FLIGHT_HOURS",
"amount": 22
},
{
"type": "COMBAT_HOURS",
"amount": 123
},
{
"type": "TRAINING_HOURS",
"amount": 456
}
]
}
],
"createdDate": "2021-11-11"
}我想对paymentType.type =“引导”和限制等于类型等于"COMBAT_HOURS“进行独家过滤。
这是我希望得到的结果。
{
"_id": {
"$oid": "613a55dccXXXXXXX28b5ba3a1"
},
"user": "CHEWBACCA",
"paymentTypes": [{
"type": "PILOT",
"limits": [{
"type": "COMBAT_HOURS",
"amount": 80000
}]
}],
"createdDate": "2021-11-11"
}如何提取文档以达到此结果?
发布于 2021-11-11 20:13:40
查询
paymentTypespaymentType= PILOT,过滤限制只保留战斗时间null (我们不想要那个paymentType)*这可能导致空数组,无论是在paymentTypes上还是在限制上,如果您不接受空数组,则可以匹配并删除这些空数组。
aggregate(
[{"$addFields":
{"paymentTypes":
{"$map":
{"input": "$paymentTypes",
"in":
{"$cond":
[{"$eq": ["$$ptype.type", "PILOT"]},
{"$mergeObjects":
["$$ptype",
{"limits":
{"$filter":
{"input": "$$ptype.limits",
"cond": {"$eq": ["$$this.type", "COMBAT_HOURS"]}}}}]},
null]},
"as": "ptype"}}}},
{"$addFields":
{"paymentTypes":
{"$filter":
{"input": "$paymentTypes", "cond": {"$ne": ["$$this", null]}}}}}])https://stackoverflow.com/questions/69933707
复制相似问题