Mongodb 如何使用查找集合中的部分字段进行筛选

Mongodb 如何使用查找集合中的部分字段进行筛选,mongodb,match,lookup,Mongodb,Match,Lookup,我正在两个mongodb集合之间进行“连接”,并希望使用字段的一部分作为条件筛选查找集合(在连接之前)。我的第一个选择是使用regex,但我在mongodb文档中找不到如何使用它。我找到了3种不同的方法来使用regex$regex,$regexMatch e$regexFind。 没有人工作,或者我不知道如何处理。 有什么想法吗? 在本部分示例中,我尝试使用这3个正则表达式中的一些,但没有成功 $and: [{ $eq: ['$id', '$$key'] }, { $eq: ['$x', 0]

我正在两个mongodb集合之间进行“连接”,并希望使用字段的一部分作为条件筛选查找集合(在连接之前)。我的第一个选择是使用regex,但我在mongodb文档中找不到如何使用它。我找到了3种不同的方法来使用regex$regex,$regexMatch e$regexFind。 没有人工作,或者我不知道如何处理。 有什么想法吗? 在本部分示例中,我尝试使用这3个正则表达式中的一些,但没有成功

 $and: [{ $eq: ['$id', '$$key'] }, { $eq: ['$x', 0], [here regex maybe or something] }]
例如,我希望在SQL“
中使用类似的语句,其中substr(字段,3,1)='A'

db.collection('collectionA').aggregate([
{
    $lookup: {
      from: 'collectionB',
      let: { key: '$key },
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [{ $eq: ['$id', '$$key'] }, { $eq: ['$x', 0] }]
            }
          }
        }
      ],
      as: 'i'
    }
  }
])

为什么不为此使用子字符串阶段

db.collection('collectionA').aggregate([
{
    $lookup: {
      from: 'collectionB',
      let: { key: '$key },
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [{ $eq: ['$id', '$$key'] }, {$eq: { $substr: {'$x', 3, 1}, 'A'} }]
            }
          }
        }
      ],
      as: 'i'
    }
  }
])
这应该与上面提到的SQL语句等效