MongoDB 2.6地理空间$ near查询行为在复合索引上发生了变化?

时间:2014-04-22 21:27:01

标签: mongodb geospatial

我一直在使用复合索引运行地理空间查询。

升级到MongoDB 2.6后,结果集的顺序已更改,以便不再按以下查询的距离对结果进行排序:

db.properties.find({ 
    "address.uppercase": { "$regex": "^14529" }, 
    "address.location": { 
        "$near": { 
            "$geometry": { 
                "type": "Point", 
                "coordinates": [ -122.2103, 47.6154 ] 
            }
        }
    }
})

属性集合上的索引配置为:

{ "address.uppercase": 1, "address.location": "2dsphere" }

在2.4中,查询返回“address.uppercase”以“14529”开头的所有地址,按地址[ -122.2103, 47.6154 ]的地址距离排序。

升级到2.6后,同样的查询现在返回“address.uppercase”排序的所有地址。

有没有办法根据查询的地理空间部分指定结果的排序顺序?

2 个答案:

答案 0 :(得分:1)

抱歉,但我没有看到这种行为。使用示例文档:

{ 
    "address" : { 
        "uppercase" : "14529", 
        "location" : { 
            "type" : "Point", 
            "coordinates" : [ -100.2014, 47.6154 ] 
        } 
    }
},
{
    "address" : {
        "uppercase" : "90210",
        "location" : {
            "type" : "Point",
            "coordinates" : [ -120.2014, 47.6154 ]
        }
    }
},
{
    "address" : { 
        "uppercase" : "14529", 
        "location" : { 
            "type" : "Point", 
            "coordinates" : [ -120.2014, 47.6154 ] 
        }
    }
}

使用查询:

db.address.find({
    "address.uppercase": { "$regex": "^14529" },
    "address.location": {
        "$near": {
            "$geometry": {
                 "type": "Point",
                 "coordinates": [ -122.2103, 47.6154 ]
            }
        }
    }
})

我按照最近的顺序得到这些:

{ 
    "address" : { 
        "uppercase" : "14529", 
        "location" : { 
            "type" : "Point", 
            "coordinates" : [ -120.2014, 47.6154 ]
        }
    }
},
{ 
    "address" : { 
        "uppercase" : "14529", 
        "location" : { 
            "type" : "Point", 
            "coordinates" : [ -100.2014, 47.6154 ]
        }
    }
}

即使回归索引类型也是如此。也许尝试删除索引并重新创建它,看看你可以重现。否则,如果您可能有一个不符合这些条件的边缘案例,那么您的问题可以通过编辑来包含所需的详细信息。

答案 1 :(得分:0)

已使用复合多键2dsphere索引确认错误。即只有当集合中的一个文档对索引定义的一个字段有多个值(即数组)时,它才会显示出来。

10gen将发布MongoDB 2.6.2中的修复程序。请参阅:https://jira.mongodb.org/browse/SERVER-13687