地理空间索引查询不使用Mongo API在Azure CosmosDB(DocumentDB)上工作

时间:2017-05-12 12:35:48

标签: mongodb azure azure-cosmosdb

我有一个带有集合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中的错误吗?

2 个答案:

答案 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