[英]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.