我想用正则表达式通过pName和pCode搜索产品,并只返回产品数组的选定值


{ "_id" : ObjectId("614ace4398294e981cc69053"), "storeId" : ObjectId("614acd4898294e981cc69046"), "product" : [ { "count" : 120, "pCode" : "KL", "pName" : "hat", "pPrice" : 350, "_id" : ObjectId("6151687aa1114528f506d76d") }, { "count" : 500, "pCode" : "J", "pName" : "jeans", "pPrice" : 850, "_id" : ObjectId("6151687aa1114528f506d76e") } ], "createdAt" : ISODate("2021-09-22T06:33:39.422Z"), "updatedAt" : ISODate("2021-10-06T04:54:56.817Z"), "__v" : 0, "status" : true }
{ "_id" : ObjectId("614b23d0b50f800cf624b0d7"), "storeId" : ObjectId("614acd4898294e981cc69046"), "product" : [ { "count" : 25, "pCode" : "LJ", "pName" : "ladies jeans", "pPrice" : 350, "_id" : ObjectId("614b23d0b50f800cf624b0d8") }, { "count" : 40, "pCode" : "NW", "pName" : "night wear", "pPrice" : 900, "_id" : ObjectId("614b23d0b50f800cf624b0d9") } ], "createdAt" : ISODate("2021-09-22T12:38:40.059Z"), "updatedAt" : ISODate("2021-09-30T12:06:09.727Z"), "__v" : 0, "status" : true }

您可以这样使用$regexMatch$filter:

db.collection.aggregate([
{
"$project": {
"_id": 1,
"storeId": 1,
"status": 1,
"createdAt": 1,
"updatedAt": 1,
"product": {
"$filter": {
"input": "$product",
"as": "p",
"cond": {
"$and": [
{
"$regexMatch": {
"input": "$$p.pCode",
"regex": "J",
"options": "i"
}
},
{
"$regexMatch": {
"input": "$$p.pName",
"regex": "jea",
"options": "i"
}
}
]
}
}
}
}
}
])

例子

最新更新