【发布时间】:2022-01-28 02:31:41
【问题描述】:
在我的应用程序中,我收集了 5000 万条数据。我正在使用类似搜索,然后计算特定字段(即 Patientfirstname)的结果。我还在 Patientfirstname 字段上创建了一个索引,它提高了性能,但仍然需要很多时间。
db.patients.find({"Patientfirstname":{"$regex":"Testuser"}}).count() 无索引 40 秒
db.patients.find({"Patientfirstname":{"$regex":"Testuser"}}).count() 在 Patientfirstname 字段上添加索引后 31 秒
db.patients.find({"Patientfirstname":{"$regex":"Testuser"}}).count()
我尝试了不同的方法(聚合),但响应仍然很慢
db.patients.aggregate.([{$match:{"Patientfirstname":{"$regex":"Testuser"}}},
{$project:{"Patientfirstname":1,"_id":1}},
{$group : {_id:"$Patientfirstname", count:{$sum:1}}},
{$sort:{"count":-1}} ])
这个查询也需要同样的时间来获取结果 31 秒
尝试了另一种方法,但结果不正确
仅从整个集合中选择字段,然后像搜索、计数和结果一样应用。
db.patients.find({},{Patientfirstname:1,_id:1}).count({"Patientfirstname":{"$regex":"Testuser"}})
在计数中应用过滤器不起作用,将显示整个集合计数 请在此查询中提供帮助以更快地获取结果。在此先感谢
【问题讨论】:
-
通过正则表达式搜索通常很慢,普通索引无济于事。你可以考虑Text Indexes
-
见$regex and Index Use。此外,您可以使用
explain()方法查看如何将索引应用于查询过滤器。一般来说,也知道:Indexing and Query Selectivity。
标签: node.js mongodb mongoose mongodb-query nosql