我有一个带有集合restaurants
的Azure CosmosDB,其中字段geoJSON
以geoJSON格式指定餐馆的位置。我正在使用MongoDB API来访问它。
当我使用mongo shell登录数据库时,我能够使用db.restaurants.find()
查看所有文档。我使用db.restaurants.createIndex( {geoJSON: "2dsphere"})
创建了一个2dsphere地理空间索引。
输出:
{
"_t" : "CreateIndexesResponse",
"ok" : 1,
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"numIndexesAfter" : 4
}
然而,在运行db.restaurants.getIndexes()
时,我仍然只看到三个索引。 This问题说不允许编制索引。这仍然是这样吗?
此外,似乎有一个名为
的索引{
"v" : 1,
"key" : {
"DocumentDBDefaultIndex" : "2dsphere"
},
"name" : "DocumentDBDefaultIndex_2dsphere",
"ns" : "<redacted>"
}
,但执行地理空间查询不会返回任何内容。
db.restautants.find({DocumentDBDefaultIndex: {$near: {$geometry: {type: "Point", coordinates: [24.9430111, 60.166608]}, $maxDistance: 1000}}})
如何使用mongo shell对此索引执行地理空间查询?这是CosmosDB中的错误吗?
答案 0 :(得分:1)
根据你的描述,我在我这边检查了这个问题。为了快速,我将MongoChef与Azure Cosmos DB一起使用。根据我的测试,db.brucetest1.createIndex({loc:"2dsphere"})
无法应用于集合。此外,我发现DocumentDB在位置字段DocumentDBDefaultIndex
上自动创建了一个2dsphere索引,然后我删除了我的文档,并按如下方式插入文档:
db.brucetest.insertMany([
{DocumentDBDefaultIndex : { type: "Point", coordinates: [ -73.97, 40.77 ] },name: "Central Park",category : "Parks"},
{DocumentDBDefaultIndex : { type: "Point", coordinates: [ -73.88, 40.78 ] },name: "La Guardia Airport",category : "Airport"}
])
通过以下查询,我可能会遇到您的问题:
db.brucetest.find({DocumentDBDefaultIndex:{$near:{$geometry:{type:"Point",coordinates:[-73.88, 40.78]}}}})
基于您提到的类似issue,我假设在Azure CosmosDB的MongoDB兼容性层中尚未实现创建/更新索引和地理空间索引查询功能。此外,您可以添加反馈here或等待发布这些功能。
答案 1 :(得分:0)
Geopatial IS目前支持MongoDB API。请参阅Geospatial operators section here。