我有一大堆文件,如:
{ 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名左右).
任何建议或帮助非常感谢!!
您是否尝试过使用聚合框架?
两阶段管道可能有效:
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将包括改进的聚合排序性能.
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |