繁体   English   中英

在 MongoDB 中合并更多 $ 匹配项

[英]Combine more $match in one $or in MongoDB

有一个搜索对一列工作正常,我想让它检查两个(更多)列中引入的字符串。

这就是它的工作原理:

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

所以它检查引入的字符串/子字符串是否存在于名称列中并过滤掉没有它的列。

我也想为城市列添加这个。 因此它会检查引入的字符串是否存在于名称城市列之一中,它不必同时存在于两个列中,只存在于一个中就可以了。

所以我为此使用$or

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 is not allowed in this atlas tier"时它不会过滤任何内容。

这怎么能解决?

你非常接近。 但是 $or 处于错误的水平。 Atlas 白名单可用阶段。 您收到该错误是因为您使用 $or 作为阶段,但事实并非如此。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM