gpt4 book ai didi

javascript - mongodb 高效排序和正则表达式查询

转载 作者:行者123 更新时间:2023-11-28 10:55:55 24 4
gpt4 key购买 nike

    db.location.find(
{ "$or": [
{ "country_lc": /^unit/, "docType": "country" },
{ "region_lc": /^unit/, "docType": "region" },
{ "city_lc": /^unit/, "docType": "city" }
]},
{ "country": 1, "region": 1, "city": 1, "docType" :1 }
).sort({ "country_lc" :1, "region_lc": 1, "city_lc":1 })

这是 monodb 中的查询花费了很多时间。如何有效地查询这个?下面是上述查询的explain()输出。我在集合位置总共有 442161 个文档。我必须进行一些前缀搜索。我已经在 (country_lc,docType) 、(region_lc,docType)、(city_lc,docType) 和 (country_lc,region_lc,city_lc) 中完成了索引。我的mongo版本是2.4.9。

{
"cursor" : "BtreeCursor country_lc_1_region_lc_1_city_lc_1",
"isMultiKey" : false,
"n" : 29,
"nscannedObjects" : 76935,
"nscanned" : 442161,
"nscannedObjectsAllPlans" : 76935,
"nscannedAllPlans" : 442161,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 79,
"nChunkSkips" : 0,
"millis" : 81531,
"indexBounds" : {
"country_lc" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
],
"region_lc" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
],
"city_lc" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},
"server" : "prashanta:27017"

}

最佳答案

您可以尝试创建 text indexcountry_lcregion_lccity_lc 字段上:

db.reviews.ensureIndex( { "country_lc": "text" } )
db.reviews.ensureIndex( { "region_lc": "text" } )
db.reviews.ensureIndex( { "city_lc": "text" } )

文本索引是 MongoDB 2.4 中的一项新功能。添加它们是为了支持集合文档中字符串内容的文本搜索。请查看官方文档以获取性能提示。

此外,您可以尝试将查询重写为

db.location.find(
{ "docType": {"$in": [ "country", "region", "city" ]},
"$or": [
{ "country_lc": /^unit/ },
{ "region_lc": /^unit/ },
{ "city_lc": /^unit/ },
]
},
{ "country": 1, "region": 1, "city": 1, "docType" :1 }
).sort({ "country_lc" :1, "region_lc": 1, "city_lc":1 })

(警告:这是否等同于您的查询,具体取决于文档的结构。)

关于javascript - mongodb 高效排序和正则表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com