未识别的表达式‘ $ REGEX’

发布于 2025-01-18 09:12:23 字数 1428 浏览 1 评论 0原文

无法获得所需的输出。收到“无法识别的表达式 '$regex'” 错误

[
    {
        '$lookup': {
            'from': 'profiles',
            'let': {
                'userId': '$userId',
            },
            'pipeline': [
                {
                    '$match': {
                        $expr: {
                            $and: [
                                { '$eq': ['$uniqueId', '$$mcontactId'] },
                                {
                                    $or: [{ 'birthDate': { '$regex': '$$today' } },
                                        { 'spouseBirthdate': { '$regex': '$$today' } },
                                        { 'weddingAnniversary': { '$regex': '$$today' } },
                                    ],
                                },
                            ],
                        },
                    },
                },
                {
                    '$project': {
                        'userId': 1,
                        'uniqueId': 1,
                        'mobileNumber': 1,
                        'whatsApp': 1,
                        'emailId': 1,
                        'lastName': 1,
                        'firstName': 1,
                        'address': 1,
                        'signature': 1,
                    },
                },
            ],
            'as': 'profile',
        },
    },
]

Not able to get desired output. Getting “Unrecognized expression ‘$regex’” error

[
    {
        '$lookup': {
            'from': 'profiles',
            'let': {
                'userId': '$userId',
            },
            'pipeline': [
                {
                    '$match': {
                        $expr: {
                            $and: [
                                { '$eq': ['$uniqueId', '$mcontactId'] },
                                {
                                    $or: [{ 'birthDate': { '$regex': '$today' } },
                                        { 'spouseBirthdate': { '$regex': '$today' } },
                                        { 'weddingAnniversary': { '$regex': '$today' } },
                                    ],
                                },
                            ],
                        },
                    },
                },
                {
                    '$project': {
                        'userId': 1,
                        'uniqueId': 1,
                        'mobileNumber': 1,
                        'whatsApp': 1,
                        'emailId': 1,
                        'lastName': 1,
                        'firstName': 1,
                        'address': 1,
                        'signature': 1,
                    },
                },
            ],
            'as': 'profile',
        },
    },
]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云朵有点甜 2025-01-25 09:12:23

$regex 是一个查询运算符,您正在尝试在使用“聚合”的 $expr 中使用它“ 语言与通常在 $match 阶段使用的“查询”语言相反。

除此之外,您的管道中还有其他一些问题,例如您仅将 $userId 定义为 $lookup 阶段的变量,但在其中您尝试使用$$today$$mcontactId 未在任何地方定义。

不管怎样,一旦你解决了这些问题,你就有两个选择:

  1. 如果正则表达式匹配与输入变量无关,只需在 $expr 之外使用 $regex ,如下所示
{
    '$match': {
        $and: [
            {
                $expr: {
                    '$eq': [
                        '$uniqueId',
                        '$userId',
                    ],
                },

            },
            {
                $or: [
                    {
                        'birthDate': {
                            '$regex': '03-05',
                        },
                    },
                ],
            },
        ],
    },
},

: a href="https://mongoplayground.net/p/Y8TLbLgiZ29" rel="nofollow noreferrer">Mongo Playground

  1. 如果正则表达式不使用来自$lookup 那么你需要使用聚合运算符,例如 $regexMatch$expr 中进行匹配

$regex is a query operator, you are trying to use it within an $expr which uses the "aggregation" language as oppose to the "query" language normally used within a $match stage.

Apart from that you have some other issue's in your pipeline, for example you only define $userId as a variable for the $lookup stage but in it you're trying to use $$today and $$mcontactId which are not defined anywhere.

Regardless once you sort out those issue's you have two options:

  1. if the regex match is not related to the input variables just use $regex outside the $expr, like so:
{
    '$match': {
        $and: [
            {
                $expr: {
                    '$eq': [
                        '$uniqueId',
                        '$userId',
                    ],
                },

            },
            {
                $or: [
                    {
                        'birthDate': {
                            '$regex': '03-05',
                        },
                    },
                ],
            },
        ],
    },
},

Mongo Playground

  1. if the regex does not to use an input variable from the $lookup then you need to use an aggregation operator, like $regexMatch to do the match within the $expr
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文