Mongodb $near 二级排序顺序

Posted

技术标签:

【中文标题】Mongodb $near 二级排序顺序【英文标题】:Mongodb $near secondary sort order 【发布时间】:2015-05-28 07:16:09 【问题描述】:

将 $near 与 mongodb 一起使用,按距离返回结果。当距离匹配时,有没有办法知道排序顺序(或指定它)?

例如,如果我请求 10 个文档并且它们的距离都相同,然后再请求另外 10 个文档并且它们与第一个集合的距离也相同,我可以对哪个字段进行排序以确保排序顺序是总是一样的?

【问题讨论】:

【参考方案1】:

$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 排序。

【讨论】:

以上是关于Mongodb $near 二级排序顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongoDb 中按多个字段排序

你如何告诉 Mongo 在限制结果之前对集合进行排序?

你如何告诉 Mongo 在限制结果之前对集合进行排序?

MongoDB 条件查询和排序

mongodb Aggregation聚合操作之$sort

使用 $near 和 2d 索引的 Mongo 地理定位不准确