如何在 mongodb 聚合中将动态字符串传递给 $regex
How a pass a dynamic string to $regex in mongodb aggregation
我有两个集合,一个是活动,另一个是订单。我必须过滤每个广告系列的订单。所以我正在做的是获取所有活动,然后查找符合某些特定条件的订单。
[
{
$match: { type: 'FOLLOWUP' }
},
{
$lookup: {
from: 'orders',
as: 'orders',
pipeline: [
{
$match: {
'title': { $regex: '$keyword', $options: 'i' },
}
}
]
}
}
]
在上面的示例中,每个广告系列都包含一个类型为 string
的 keyword
字段。因此,我必须为每个在 title
中包含 keyword
的广告系列过滤所有订单,并且每个广告系列都有不同的关键字。我如何传递对 $regex 的动态引用,如果我使用的是硬编码字符串,它工作正常,但对于传递引用 ('$keyword') 它不起作用。
如有任何帮助,我们将不胜感激。
你可以试试$regexMatch聚合表达式运算符,
let
将 keyword
从活动集合传递到查找
$regexMatch
聚合表达式运算符将输入作为 title
传递,正则表达式作为来自 let
的 keyword
引用使用 $$
符号
[
{ $match: { type: "FOLLOWUP" } },
{
$lookup: {
from: "orders",
as: "orders",
let: { keyword: "$keyword" },
pipeline: [
{
$match: {
$expr: {
$regexMatch: {
input: "$title",
regex: "$$keyword",
options: "i"
}
}
}
}
]
}
}
]
我有两个集合,一个是活动,另一个是订单。我必须过滤每个广告系列的订单。所以我正在做的是获取所有活动,然后查找符合某些特定条件的订单。
[
{
$match: { type: 'FOLLOWUP' }
},
{
$lookup: {
from: 'orders',
as: 'orders',
pipeline: [
{
$match: {
'title': { $regex: '$keyword', $options: 'i' },
}
}
]
}
}
]
在上面的示例中,每个广告系列都包含一个类型为 string
的 keyword
字段。因此,我必须为每个在 title
中包含 keyword
的广告系列过滤所有订单,并且每个广告系列都有不同的关键字。我如何传递对 $regex 的动态引用,如果我使用的是硬编码字符串,它工作正常,但对于传递引用 ('$keyword') 它不起作用。
如有任何帮助,我们将不胜感激。
你可以试试$regexMatch聚合表达式运算符,
let
将keyword
从活动集合传递到查找$regexMatch
聚合表达式运算符将输入作为title
传递,正则表达式作为来自let
的keyword
引用使用$$
符号
[
{ $match: { type: "FOLLOWUP" } },
{
$lookup: {
from: "orders",
as: "orders",
let: { keyword: "$keyword" },
pipeline: [
{
$match: {
$expr: {
$regexMatch: {
input: "$title",
regex: "$$keyword",
options: "i"
}
}
}
}
]
}
}
]