我有以下数据:
{
"name" : "...",
"suppiler" : [
{"name":"...."},
{"name":"...."},
],
"administration" : [
{"name":"..."},
{"name":"..."},
],
...
}
我在做一个搜索类的查询,它可以匹配指定的一些字段,包括数组内的json字段,例如suppiler.name
db.base.aggregate([
{"$match" :
{
"$or" :
[
{"name" : {"$regex" : key}}
{"administration.name": {"$regex": key}},
{"suppiler.name": {"$regex": key}},
]
}
},
{"$project":
{"_id":false,
"name":true,
"__regx__":"被匹配的字段"
}
}
])
我想在自定义的__regx__字段内写入当前匹配到的是什么字段。
例如第一行:name被匹配,则设置"__regx__":"name"
MongoDB版本:4.2
我尝试过以下几种办法,都不能解决:
1、在"$project"内用"$switch"进行选择,然后用"$regexMatch"再次匹配后填入匹配的字段。
{"$project":
{ "_id":...
"__regx__":
{
"$switch":
{
"branches":
[
{"case": {"$regexMatch":{"input":"$name","regex": key}},"then" : "name匹配"},
{"case": {"$regexMatch":{"input":"$suppiler.name","regex": key}},"then" : "supppiler.name匹配"},
],
"default":"..."
}
}
}
}
"$regexMatch"不能使用数组作为输入,没办法,我又试着下面的办法再去尝试。
2、打散数组再进行匹配:
[
{"$match" ...}
...
{"$unwind":"$suppiler"}
{"$project"...}
]
现在数组是打散了,但是,数组内有多少个成员就会多出多少条数据,这也不是我想要的。
以上,有没有什么办法,在"$project"内对数组的每个成员进行"$regexMatch"操作,或者"$indexOfCP"也可以。
或者说,有什么更好的办法可以得到每条数据对应的匹配条件。
相似问题