具有以下工作代码:
const aggregateOptions = [];
// search by name
if (req.query.name) {
aggregateOptions.push({ $match: { name: { $regex: req.query.name, $options: 'i' } } });
}
// search by surname
if (req.query.surname) {
aggregateOptions.push({ $match: { surname: req.query.surname } });
}
// search by nationality
if (req.query.nationality) {
aggregateOptions.push({ $match: { nationality: req.query.nationality } });
}
它负责构建用于搜索的查询。问题是它们是分开工作的,我希望能够在搜索栏中写入一个字符串,并编写代码来搜索所有3个字段。
例如,现在有一个名称搜索栏,当我写";my_string";它只检查是否有一个名称=";my_string";我想检查一下他们所有人。
类似于name=";my_string";OR姓=";my_string";OR国籍=";my_string";。
所以我用了$or,写下了这个:
aggregateOptions.push({
$or: [
{ nationality: req.query.nationality },
{ surname: req.query.surname },
{ name: { $regex: req.query.name, $options: 'i' } },
],
});
这似乎是错误的,并返回此错误消息:"$或者在该图集层中是不允许的">
您可以使用文本搜索。在mongo中,你可以用之类的东西制作一个包含国籍、姓氏和姓名的文本索引
db.collection.createIndex( { nationality: "text", surname: "text", name: "text" } )
现在你可以用之类的东西查询你的收藏
db.collection.find({$text: { $search:req.query.name } })
它将对所有3个字段执行文本搜索并返回任何匹配项。
以下是一些资源:
https://docs.mongodb.com/manual/core/index-text/https://docs.mongodb.com/manual/reference/operator/query/text/希望这能有所帮助!