如何使用Mongoose在MongoDB中的字段上执行LEFT JOIN和LIKE?

ee7vknir  于 2023-05-06  发布在  Go
关注(0)|答案(1)|浏览(207)

我有三个以上的表需要与MongoDB的Mongoose连接,但是每个表都有一个代码,可以在不同的位置。我给予你举个例子:

table1 - Code: "13421" (string)
table2 - Code: "42932-13421" (string)
table3 - Code: "()13421" (string)

因此,索引代码包含在“code”字段中,但它可以在不同的位置。我已经知道在MySQL中我可以用LIKE来处理它:

SELECT *
FROM table1 
LEFT JOIN table2 ON table2.code LIKE %table1.code%
LEFT JOIN table3 ON table3.code LIKE %table1.code%

但是对于Mongoose,我如何专门在该字段上执行查找?
我认为类似的东西应该起作用:

table1.aggregate(
 {
   $lookup: {
     from: 'table2',
       pipeline: [
         {
           $match: {
             $expr: {
               $regexMatch: {
                 input: '$table2.code',
                 regex: { $regex: '.*$$code.*', $options: 'i' }
               }
             }
           }
         }
       ],
       as: 'table2'
     }
   },

这是MongoDB的错误:

Error: MongoServerError: An object representing an expression must have exactly one field: { $regex: ".*code.*", $options: "i" }
46qrfjad

46qrfjad1#

regex expect pattern and not expression,尝试将代码改为:

db.table1.aggregate([
  {
    $lookup: {
      from: "table2",
      let: {
        "code1": "$code"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $regexMatch: {
                input: "$code",
                regex: "$$code1",
                options: "i"
              }
            }
          }
        }
      ],
      as: "table2"
    }
  }
])

相关问题