【发布时间】:2015-12-07 09:28:19
【问题描述】:
查询接收一对坐标、一个最大距离半径、一个“跳过”整数和一个“限制”整数。该函数应根据给定的位置返回最近和最新的位置。我的代码中没有明显的错误,但是,当我再次调用查询时,它会返回重复的结果。 “skip”变量根据返回的结果进行更新。
例子:
1) 我使用 skip = 0, limit = 10 进行查询。我收到 10 个非重复位置。
2) 现在再次调用查询,skip = 10,limit = 10。我从第一个查询中收到了另外 10 个重复结果的位置。
查询
Locations.find({ coordinates :
{ $near : [ x , y ],
$maxDistance: maxDistance }
})
.sort('date_created')
.skip(skip)
.limit(limit)
.exec(function(err, locations) {
console.log("[+]Found Locations");
callback(locations);
});
架构
var locationSchema = new Schema({
date_created: { type: Date },
coordinates: [],
text: { type: String }
});
我已经尝试到处寻找解决方案。我唯一的选择是 Mongo 的版本?我使用 mongoose 4.x.x 和 mongodb 就像 2.5.6。我相信。有任何想法吗?
【问题讨论】:
-
您在执行
$near之后按date_created对结果进行排序,这不是一个好主意,也可能不是您想要的,因为它“丢弃”了返回的“排序”近操作。还应尽可能避免分页的“跳过”和“限制”方法,并且仅在您“需要”编号分页以“跳转”到并且没有替代方法的情况下使用。我认为其目的至少是找到“最近”的东西,然后“然后”按创建顺序对大约相同距离的任何东西进行排序? -
没错!我能做什么?
-
分页怎么样?你真的需要页码吗?或者你可以简单地要求下一页和下一页等等。
-
这正是我的意思,获取一个页面,然后只获取“下一个”页面等等,每次需要一个新页面并且您永远不会“跳转到第 5 页”。我问是因为这样可以避免跳过和限制,因此有更好的方法。
标签: node.js mongodb mongoose mongodb-query aggregation-framework