【发布时间】:2017-03-17 11:36:18
【问题描述】:
我正在为 MongoDB 使用 mongoose 开发 Express API。在下面的代码中,我试图找到一定距离内的 GeoJson 对象,对它们进行排序,使最新的对象首先出现,在返回“限制”中指定数量的对象之前跳到某个文档。
// Find all of the stacks in a given radius
router.param("range", function(req, res, next, range) {
if(range === "1") {
var radius = 8125; // Meters. (5 Miles)
} else if(range === "0") {
var radius = 45.75; // Meters. (150 Feet)
}
var skipTo = parseInt(req.params.skip);
var origin = [parseFloat(req.params.lon), parseFloat(req.params.lat)]; // [longitude, latitude]
var userLocation = { type: "Point", coordinates: origin };
var options = { maxDistance: radius,
spherical : true,
sort: {
createdAt: -1 // Sort by Date Added DESC
},
skip: skipTo, // Skip to a specific point
limit: 15 // How many returned
};
Stack.geoNear(userLocation, options, function(err, result, stats) {
if(err) return next(err);
if(!result) {
err = new Error("Not Found");
err.status = 404;
return next(err);
}
req.locals = result;
next();
});
});
当我运行代码时,geoNear() 函数和 limit 函数一样完美。我的问题是排序和跳过。就好像 sort 和 skip 被忽略了一样。我在网上查看了 mongo 和 mongoose 文档以及类似的代码,但在任何地方都找不到修复程序。我怎样才能使当我尝试获取某个区域的文档时,我的结果会被正确地跳过并按日期组织?
【问题讨论】:
-
@Molda 我认为他正在尝试进行 Mongoose 查询而不是聚合。 mongoosejs.com/docs/api.html#model_Model.geoNear
-
@dyouberg 在我链接的问题中,他们说 geoNear 不支持跳过,可以使用聚合代替。我对猫鼬不太熟悉,所以我可能错了。
-
@Molda 我想通了。如上所述,不支持跳过。使用了聚合。谢谢
标签: javascript node.js mongodb sorting mongoose