对于按自定义字段排序的最近文档,适当的Pub / Sub是什么?

时间:2016-09-15 11:48:52

标签: mongodb sorting meteor

在我的Meteor项目中,我有这样的文件:

{
    "_id" : "cgR25FAxb3tbYShjN",
    "owner" : "6mQKnNnwkQYSaaAMr",
    "username" : "admin",
    "filename" : "5sQqwbDFBcZZ.png",
    "title" : "Title",
    "points" : 2,
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            -119.981134343, 
            20.635934343
        ]
    },
    "createdAt" : ISODate("2016-09-15T10:27:20.956Z")
}

我可以通过此查询找到最近的文档:

Photos.find({loc: {$near: { $geometry: {type: "Point", coordinates: [lng, lat]}}}});

我希望能够通过pointscreatedAt之类的方式对附近的所有文档进行排序。如果我一次发布所有文件,我就能做到这一点。

问题:

一次发布200多个文档并不是最理想的。我希望能够限制返回给客户端的金额,并根据需要请求更多。问题是:如果我在查询中使用简单的{limit: 20}执行此操作,则可能会有一个文档距离更远,有更多的点。这基本上搞砸了所有排序。

我考虑过立即在服务器上查找所有文档,然后一次排序并返回20个,但是这不会给我的服务器带来巨大的负担吗?每个用户在内存中存储200多个文档似乎也不是一个好主意。

更新

我越想到这一点,我就越发现需要先在服务器上进行大量查询,然后手动将数据传递给客户端。即使我进行了$geoWithin查找,如果我将pub限制为20个文档,当我对它们进行排序时它们仍会出现故障,因为它们是在不同时间提取的。

1 个答案:

答案 0 :(得分:0)

您还需要指定$minDistance$maxDistance以及查询。

Photos.find({loc: {$near: { $geometry: {type: "Point", coordinates: [lng, lat]}},$maxDistance: 0.01}});

查询中的0.01以弧度为单位。

参考docs