我正在使用用户传递的搜索值在我们的快速应用程序中进行mongo查询。
return await Orders.find({
orderId: {
$regex: `${search}`,
$options: "i"
}
})
orderId
的格式POXXXXXXXXXX
其中 X 表示数字。通常客户搜索仅使用orderId
的数字部分。我的问题是,如果我按如下方式修改我的代码,它会使查询更快吗?
const filter = {
$regex: `${search}`
}
if(isNumeric(search)){
filter["$options"]= "i"
}
return await Orders.find(filter)
我测试了这两个查询,但结果不一致。
要回答原始问题 - 不,正则表达式选项中的条件区分大小写不会给您带来明显的性能改进。
假设用户将从前导数字开始搜索,您可以通过按 orderId 字段索引集合来大幅提高搜索速度。
搜索喜欢
let numberSearch = search.replace(/^PO/i, "")
return await Orders.find({
orderId: {
$regex: `^PO${numberSearch}`,
$options: "i"
}
})
规范化输入字符串并使用可以从索引中受益的锚定正则表达式。
请注意,结果将与原始查询略有不同。带有 orderId "PO123456" 的文档是 OP 查询中的匹配项,但不在此查询中。
如果您将索引与MongoDB一起使用,那么您的查询搜索速度可以提高。如果您尚未申请。
使用以下命令创建索引,
.db。Orders.createIndex({ orderId: 1 },{ background : true , unique : true })
关于选项 ,
背景 : 真
如果我们希望在创建索引时使站点处于活动状态
唯一:真实
仅当唯一字段值时才使用它