无法识别的表达式“$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
未在任何地方定义。
不管你解决了那些问题,你有两个选择:
- 如果正则表达式匹配与输入变量无关,只需在
$expr
之外使用 $regex
,如下所示:
{
'$match': {
$and: [
{
$expr: {
'$eq': [
'$uniqueId',
'$$userId',
],
},
},
{
$or: [
{
'birthDate': {
'$regex': '03-05',
},
},
],
},
],
},
},
- 如果正则表达式不使用来自
$lookup
的输入变量,那么您需要使用聚合运算符,例如 $regexMatch 在 $expr
[= 中进行匹配35=]
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
未在任何地方定义。
不管你解决了那些问题,你有两个选择:
- 如果正则表达式匹配与输入变量无关,只需在
$expr
之外使用$regex
,如下所示:
{
'$match': {
$and: [
{
$expr: {
'$eq': [
'$uniqueId',
'$$userId',
],
},
},
{
$or: [
{
'birthDate': {
'$regex': '03-05',
},
},
],
},
],
},
},
- 如果正则表达式不使用来自
$lookup
的输入变量,那么您需要使用聚合运算符,例如 $regexMatch 在$expr
[= 中进行匹配35=]