如果当字符串仅为数字时不添加选项,mongo 查询的性能是否更好



我正在使用用户传递的搜索值在我们的快速应用程序中进行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 })

关于选项 ,

背景 : 真

如果我们希望在创建索引时使站点处于活动状态

唯一:真实

仅当唯一字段值时才使用它

最新更新