无法识别的表达式“$regex”

Unrecognized expression ‘$regex’

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',
        },
    },
]

$regex is a query operator, you are trying to use it within an $expr 使用“聚合”语言来反对 $match 阶段通常使用的“查询”语言。

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

不管你解决了那些问题,你有两个选择:

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

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

Mongo Playground

  1. 如果正则表达式不使用来自 $lookup 的输入变量,那么您需要使用聚合运算符,例如 $regexMatch$expr[= 中进行匹配35=]