我一直在使用复合索引运行地理空间查询。
升级到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”排序的所有地址。
有没有办法根据查询的地理空间部分指定结果的排序顺序?
答案 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