我有一个nodejs express web,其中有一个mongo数据库,
const AuthorSchema = new Schema({
first_name: { type: String, required: true, maxLength: 100 },
family_name: { type: String, required: true, maxLength: 100 },
date_of_birth: { type: Date },
date_of_death: { type: Date },
});
我想使用正则表达式搜索作者的名字+姓氏。换句话说,假设我们有一个作者:...名字(_N):“亚历山德罗”家族名称:'Manzoni'...我想使用所有搜索字符串进行匹配:
“亚历山德罗”或“艾尔”或“曼佐”或“亚历山德罗曼佐尼”或“曼佐尼亚历山德罗”
所以我写了这个:
const searchRegex = new RegExp(req.body.search_text, 'i');
Author.find({ $where:
function() {
return (searchRegex.test(this.first_name + " " + this.family_name)
|| searchRegex.test(this.family_name + " " + this.first_name) )
}
},"_id").exec(function (err, list_authors) {
我得到了:
MongoServerError: Executor error during find command :: caused by :: ReferenceError: searchRegex is not defined :
@:2:33
我尝试使用$let子句,但我所做的只是在结果列表中获取所有作者的id。
2条答案
按热度按时间eqqqjvef1#
我认为您正在寻找类似这样的东西(并且避免效率非常低的
$where
):此查询将名字和姓氏连接起来,并对其进行正则表达式匹配。
如果正则表达式中有匹配项(结果为
true
),则返回文档,否则不返回。示例here
rjzwgtxy2#
谢谢,你的答案很好用。我在family_name +““+ first_name中添加了一个$or来搜索,并删除了选项行,因为它们在正则表达式中。所以最终的代码是:
真的有很多代码,但它工作...