有效地对mongodb地理空间查询的结果进行排序

Hep*_*tic 4 mongodb

我有一大堆文件,如:

{ loc: [10.32, 24.34], relevance: 0.434 }
Run Code Online (Sandbox Code Playgroud)

并希望能够有效地执行以下查询:

 { "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }
Run Code Online (Sandbox Code Playgroud)

随意的盒子.

添加2d索引loc使得这非常快速和有效.但是,我现在也想获得最相关的文件:

.sort({ relevance: -1 })
Run Code Online (Sandbox Code Playgroud)

这导致一切都被抓到了(在任何特定的盒子里都会有大量的结果,而我只需要前10名左右).

任何建议或帮助非常感谢!!

Sea*_*lly 6

您是否尝试过使用聚合框架?

两阶段管道可能有效:

  1. 一个$匹配使用您现有的$ geoWithin,查询阶段.
  2. 排序$ sort阶段relevance: -1

以下是它的外观示例:

db.foo.aggregate(
    {$match: { "loc": {"$geoWithin":{"$box":[[-103,10.1],[-80.43,30.232]]}} }},
    {$sort: {relevance: -1}}
);
Run Code Online (Sandbox Code Playgroud)

我不确定它会如何表现.但是,即使它与MongoDB 2.4相比较差,它在2.6/2.5中可能会有很大差异,因为2.6将包括改进的聚合排序性能.