javascript - 对于一个特定文档,mongodb 查询非常慢
问题描述
我有以下用于 ERP 系统的数据库结构:我有一个与类别集合相关的产品集合,两个集合之间的关系使用 _id,产品包含与之相关的类别 ID。我在根据特定类别(即“超市”)过滤产品时遇到问题,应用程序查询在响应超时之前仍然没有任何响应,但是当根据另一个类别过滤这些产品时它工作正常,算法按类别名称过滤产品,如下所示:
let category = await Category.findOne({
$or: [
{ "name.en": { $regex: queries.category, $options: "i" } },
{ "name.ar": { $regex: queries.category, $options: "i" } }
]
})
if (category) {
search.categories = { $in: [category._id] };
}
然后找到包含找到的类别 id 的产品,如下所示:
let products = await Product.find(search, "", {
skip: currentProducts,
limit: limit
})
该过程适用于除超市类别之外的任何类别名称,我确信该类别存在并且有产品包含它,但它仍然搜索没有任何响应,直到超时,所以这里有什么问题?
那么设计数据库是一件好事还是有更好的设计?但是索引产品的方法是显示商店相关产品,这需要索引自定义价格集合以查找商店价格,这使得查询时间约为 5 毫秒,所以这是好还是有更好的解决方案?,但是我使用的是本机mongodb聚合和查找
编辑:
这是产品集合文档的示例:
{
"_id": "5dd51c43147001172871c61a",
"status": "approved",
"price": 59.95,
"categories": [
"5dd51c37147001172871c413",
"5dd51c37147001172871c414",
"5dd51c3d147001172871c59d",
"5dd52a056ceb13168dd5b04a",
"5dd5b96365a4b415de04f900"
],
"updateState": false,
"stores": [
"5dde07ec24c64142ceacb851",
"5dde07ec24c64142ceacb854",
"5dde07ed24c64142ceacb858",
"5dde07ee24c64142ceacb866",
"5dde07ee24c64142ceacb86a",
"5dde07ef24c64142ceacb86c",
"5dde07f024c64142ceacb874",
"5dde07f024c64142ceacb876",
"5dde1c2b40392b4228a1b9e3"
],
"gallery": [],
"customPrices": [
"5dde1c2c40392b4228a1bbe8",
"5dde2ab240392b4228a23cfd",
"5dde2ab540392b4228a23da9",
"5dde2ab240392b4228a23d12",
"5dde2ab640392b4228a23de1",
"5dde2ab640392b4228a23df2",
"5dde2ab540392b4228a23db6",
"5dde2ab240392b4228a23d15",
"5dde2ab540392b4228a23d9a"
],
"disabled": false,
"deleted": false,
"extras": [],
"createdAt": "2019-11-20T10:58:11.112Z",
"title": {
"en": "Easy Care Baby Wipes For Sensitive Skin - 80 Wipes Pack Of 21",
"ar": "ايزي-كير مناديل مبللة للاطفال للبشرة الحساسة - 80 مناديل مبللة عبوة من 21"
},
"image": {
"name": "/uploads/Carrefour%20Images/477829_0.jpg",
"path": "/uploads/Carrefour%20Images/477829_0.jpg"
},
"barcode": "477829",
"quantity": 1,
"brand": {
"en": "",
"ar": ""
},
"type": "global",
"__v": 0
}
这是自定义价格收集文件的示例:
{
"_id": "5dda5dd87675c70c6fcce125",
"price": 59,
"store": "5dcdb1ffb20788411552596b",
"product": "5dd68853086f1c37f851c31b",
"__v": 0
}
我为产品集合中的以下字段创建了索引:
1- title.en 2- title.ar 3- customPrices 4- 商店
并在 customPrices 集合中为以下字段创建索引:
1- 商店 2- 产品
我观察到正则表达式在某些情况下效果不佳,例如使用单词+空格搜索时会花费很多时间,所以请任何人帮助我优化应用程序的性能,以及数据库会更多在不久的将来更大
解决方案
推荐阅读
- android - 如何在 XML 或 Kotlin 代码中修复 RecyclerView 的高度
- sql - 用于合并共享记录的数据组的 SQL
- c# - asmx soap webservice中的额外类
- ios - 如果我删除 Apple 开发者帐户中的身份验证密钥,我可以收到推送通知到我的手机吗
- tsql - sp_executesql 在变量中的结果
- ruby-on-rails - rails 控制台无法在 kubernetes 上运行“bundle exec rails c”
- python - 递归动画matplotlib
- c# - 如何在不更改引用的情况下将两个字符串添加在一起
- java - 带有 Spring Boot 的 AWS cognito 用户池服务器端流程
- php - yii2 禁用对隐藏字段的验证