有没有办法在 $filter (聚合)中使用正则表达式而不是字符串数组
is there a way to use regex over string array within $filter (aggregation)
目前正在使用这个
.find({"strings": {"$elemMatch": {"$in": [/test/si]}}})
在 "strings" 数组中查找字符串。现在我还需要搜索这个字符串 HERE
.aggregate([
{
$match: {"_id" : ObjectId("5c5c59c689c4cf027b382999") }
},
{ $project: {
data: {
$filter: {
input: '$data',
as: 'item',
cond: {
---------------------------------这里
}
}
}
}}
])
我已经尝试了很多类似的事情,例如:
.aggregate([ {
$match:
{"_id" : ObjectId("5c5c59c689c4cf027b382999") }
},
{ $project: {
data: {
$filter: {
input: '$data',
as: 'item',
cond: { $in: [/test/si, "$$item.strings"] }
}
}
}}
])
我目前想不出有什么办法可以做到这一点。
在 3.6 版本中有什么方法可以做到这一点吗?
如果您能以任何方式提供帮助:谢谢
问候H.M.
我做了一个解决方法:
"$filter": {
"input": "$data",
"as": "item",
"cond": {
"$lt": {-1, {"$indexOfBytes": ["$$item.searchString", "text"]}}}
}
但是如果没有正则表达式,这真的很糟糕,我无法匹配 string[]
目前正在使用这个
.find({"strings": {"$elemMatch": {"$in": [/test/si]}}})
在 "strings" 数组中查找字符串。现在我还需要搜索这个字符串 HERE
.aggregate([
{
$match: {"_id" : ObjectId("5c5c59c689c4cf027b382999") }
},
{ $project: {
data: {
$filter: {
input: '$data',
as: 'item',
cond: {
---------------------------------这里
}
}
}
}}
])
我已经尝试了很多类似的事情,例如:
.aggregate([ {
$match:
{"_id" : ObjectId("5c5c59c689c4cf027b382999") }
},
{ $project: {
data: {
$filter: {
input: '$data',
as: 'item',
cond: { $in: [/test/si, "$$item.strings"] }
}
}
}}
])
我目前想不出有什么办法可以做到这一点。 在 3.6 版本中有什么方法可以做到这一点吗?
如果您能以任何方式提供帮助:谢谢
问候H.M.
我做了一个解决方法:
"$filter": {
"input": "$data",
"as": "item",
"cond": {
"$lt": {-1, {"$indexOfBytes": ["$$item.searchString", "text"]}}}
}
但是如果没有正则表达式,这真的很糟糕,我无法匹配 string[]