在MongoDB和node.js中将多个搜索选项合并为一个



具有以下工作代码:

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/希望这能有所帮助!

最新更新