gpt4 book ai didi

node.js - MongoDB 地理空间索引,如何与数组元素一起使用?

转载 作者:可可西里 更新时间:2023-11-01 10:32:38 26 4
gpt4 key购买 nike

我想在给定位置附近找到 Kevin 酒吧的位置。这是 userSpots 集合:

{   user:'Kevin',
spots:[
{ name:'a',
type:'pub',
location:[x,y]
},
{ name:'b',
type:'gym',
location:[v,w]
}
]
},
{ user:'Layla',
spots:[
...
]
}

这是我尝试过的:

db.userSpots.findOne(
{ user: 'Kevin',
spots: {
$elemMatch: {
location:{ $nearSphere: [lng,lat], $maxDistance: d},
type: 'pub'
}
}
},
},
function(err){...}
)

我收到一个奇怪的错误。 Mongo 告诉我位置字段中没有索引 :2d。但是当我检查 db.userSpots.getIndexes() 时,二维索引就在那里。为什么 mongodb 看不到索引?我做错了什么吗?

MongoError: can't find special index: 2d for : { spots: { $elemMatch: { type:'pub',location:{ $nearSphere: [lng,lat], $maxDistance: d}}}, user:'Kevin'}

db.userSpots.getIndexes() 输出:

    {
"0" : {
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydb.userSpots",
"name" : "_id_"
},
"1" : {
"v" : 1,
"key" : {
"spots.location" : "2d"
},
"ns" : "mydb.usersBoxes",
"name" : "spots.location_2d",
"background" : true,
"safe" : null
}
}

最佳答案

对于类似的地理空间应用程序,我将位置转换为 GeoJSON:

{
"_id" : ObjectId("5252cbdd9520b8b18ee4b1c3"),
"name" : "Seattle - Downtown",
"location" : {
"type" : "Point",
"coordinates" : [
-122.33145,
47.60789
]
}
}

(坐标为经/纬度格式。Mongo 对 GeoJSON 的使用描述为 here .)。

索引是使用以下方法创建的:

db.userSpots.ensureIndex({"location": "2dsphere"})

在我的聚合管道中,我使用以下方法找到匹配项:

{"$match":{"location":{"$geoWithin": {"$centerSphere":[[location.coordinates[0], location.coordinates[1]], radius/3959]}}}}

(半径以英里为单位 - 魔数(Magic Number)用于转换为弧度)。

关于node.js - MongoDB 地理空间索引,如何与数组元素一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19639793/

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