gpt4 book ai didi

Mongodb 地理空间索引不支持$box?

转载 作者:可可西里 更新时间:2023-11-01 09:35:03 25 4
gpt4 key购买 nike

我正在创建一个 2dsphere 索引并尝试将其用于我的地理空间查询。但是,我发现当我使用 $geoWithin.$box 时,它不使用索引,因此非常慢。如果我使用 $geoWithin.$geometry,那么将使用索引。 document说 $box 支持索引,所以我一定是错过了什么。有什么想法吗?

地理空间索引

    {
"v" : 1,
"key" : {
"details.lonlat" : "2dsphere"
},
"name" : "longlat",
"ns" : "realestate.property",
"2dsphereIndexVersion" : 2
}

GeoJSON 多边形查询使用索引

> db.property.find({'details.lonlat': {'$geoWithin': {$geometry: {type:'Polygon', coordinates: [[[1,1],[2,2],[3,3], [1,1]]]}}}}).explain()

"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"details.lonlat" : "2dsphere"
},
...

使用$box不使用索引,而是使用集合扫描(为什么?)

> db.property.find({'details.lonlat': {'$geoWithin': {'$box': [[ 0, 0 ], [ 100, 100 ] ]}}}).explain()
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"details.lonlat" : {
"$geoWithin" : {
"$box" : [
[
0,
0
],
[
100,
100
]
]
}
}
},
"direction" : "forward"

Mongodb 信息

            "version" : "3.0.4",
"gitVersion" : "0481c958daeb2969800511e7475dc66986fa9ed5"

最佳答案

2dsphere 不支持 $box 查询。这就是您的查询落入完整集合扫描的原因。

盒子documentation陈述如下:

Only the 2d geospatial index supports $box

添加 2d 索引应该可以解决问题,例如:

db.property.ensureIndex({"details.lonlat": "2d"});

关于Mongodb 地理空间索引不支持$box?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37296270/

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