提问者:小点点

在one$或MongoDB中组合更多$match


有一个搜索对一列很好,我想让它在两列(更多)中检查引入的字符串。

这是它的工作原理之一:

if (req.query.name) {
      aggregateOptions.push({ $match: { name: { $regex: req.query.name, $options: 'i' } } });
}

因此它检查引入的字符串/子字符串是否存在于name列中,并过滤掉没有它的列。

我想添加这也为城市栏。 所以它检查引入的字符串是否出现在name或city列中,它不一定要出现在两个列中,只出现在其中一个就可以了。

因此我使用$或:

if (req.query.name) {
  aggregateOptions.push({
    $or: [
      { $match: { name: { $regex: req.query.name, $options: 'i' } } },
      { $match: { city: { $regex: req.query.city, $options: 'i' } } },
    ],
  });
}

这似乎是错误的,因为当在搜索框中引入字符串时,它不过滤任何内容,并返回错误400和“$OR不允许在此atlas Tier中”

这个怎么解决?


共1个答案

匿名用户

你很亲密的。 但是$或在错误的级别上

if (req.query.name) {
  aggregateOptions.push({
    $match: {
      $or: [
        { name: { $regex: req.query.name, $options: 'i' } },
        { city: { $regex: req.query.city, $options: 'i' } },
      ],
    }
  });
}