在我的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]}}}});
我希望能够通过points
或createdAt
之类的方式对附近的所有文档进行排序。如果我一次发布所有文件,我就能做到这一点。
问题:
一次发布200多个文档并不是最理想的。我希望能够限制返回给客户端的金额,并根据需要请求更多。问题是:如果我在查询中使用简单的{limit: 20}
执行此操作,则可能会有一个文档距离更远,有更多的点。这基本上搞砸了所有排序。
我考虑过立即在服务器上查找所有文档,然后一次排序并返回20个,但是这不会给我的服务器带来巨大的负担吗?每个用户在内存中存储200多个文档似乎也不是一个好主意。
更新
我越想到这一点,我就越发现需要先在服务器上进行大量查询,然后手动将数据传递给客户端。即使我进行了$geoWithin
查找,如果我将pub限制为20个文档,当我对它们进行排序时它们仍会出现故障,因为它们是在不同时间提取的。
答案 0 :(得分:0)
您还需要指定$minDistance
或$maxDistance
以及查询。
Photos.find({loc: {$near: { $geometry: {type: "Point", coordinates: [lng, lat]}},$maxDistance: 0.01}});
查询中的0.01
以弧度为单位。
参考docs。