Mongodb $near 二级排序顺序
Mongodb $near secondary sort order
将 $near 与 mongodb 结合使用,returns 按距离计算结果。当距离匹配时,有没有办法知道排序顺序(或指定排序顺序)?
比如我请求了10个文档,它们的距离都一样,然后再请求10个文档,它们也和第一组的距离一样,我可以在哪个字段上排序来保证排序顺序总是一样的?
$near
和 $geoNear
按距离排序,对于距输入点相同距离的事物,未定义顺序。您可以使用带有 $geoNear
的聚合来根据距离 + 另一个字段进行排序以确保一致的顺序:
db.test.aggregate([
{ "$geoNear" : {
"near" : { "type" : "Point", "coordinates" : [-73, 40] },
"distanceField" : "dist",
"maxDistance" : 2,
"spherical" : true
} },
{ "$sort" : { "dist" : 1, "_id" : 1 } }
])
$sort
阶段将无法使用索引,但希望性能不会太差,因为结果已经按 dist
.
排序
将 $near 与 mongodb 结合使用,returns 按距离计算结果。当距离匹配时,有没有办法知道排序顺序(或指定排序顺序)?
比如我请求了10个文档,它们的距离都一样,然后再请求10个文档,它们也和第一组的距离一样,我可以在哪个字段上排序来保证排序顺序总是一样的?
$near
和 $geoNear
按距离排序,对于距输入点相同距离的事物,未定义顺序。您可以使用带有 $geoNear
的聚合来根据距离 + 另一个字段进行排序以确保一致的顺序:
db.test.aggregate([
{ "$geoNear" : {
"near" : { "type" : "Point", "coordinates" : [-73, 40] },
"distanceField" : "dist",
"maxDistance" : 2,
"spherical" : true
} },
{ "$sort" : { "dist" : 1, "_id" : 1 } }
])
$sort
阶段将无法使用索引,但希望性能不会太差,因为结果已经按 dist
.