【发布时间】:2014-10-24 09:50:31
【问题描述】:
我有一个使用 node.js mongodb 和 mongoose 实现的地理数据 api。 我想用两个条件查询我的数据。
首先,我使用 geoNear 来获取给定半径内的所有位置,效果很好。 其次,我想按类型进一步过滤位置。
这是我的架构:
var GeoLocationSchema = new Schema({
name: String,
type: String,
loc: {
type: {
type: String,
required: true,
enum: ["Point", "LineString", "Polygon"],
default: "Point"
},
coordinates: [Number]
}
});
// ensure the geo location uses 2dsphere
GeoLocationSchema.index({ loc : "2dsphere" });
这是我的 geoNear 查询:
router.route("/locations/near/:lng/:lat/:type/:max")
// get locations near the get params
.get(function(req, res) {
// setup geoJson for query
var geoJson = {};
geoJson.type = "Point";
geoJson.coordinates = [parseFloat(req.params.lng), parseFloat(req.params.lat)];
// setup options for query
var options = {};
options.spherical = true;
options.maxDistance = parseInt(req.params.max)/6370000;
// query db with mongoose geoNear wrapper
GeoLocation.geoNear(geoJson, options, function (err, results, stats) {
if (err)
res.send(err);
res.json(results);
});
});
是否有可能将 geoNear 查询与特定类型位置的查询结合起来,或者我可以以某种方式过滤结果?
提前致谢。
【问题讨论】:
-
使用
$geoNear聚合阶段作为管道中的第一阶段。您可以使用$match阶段等进行进一步的条件/操作。
标签: node.js mongodb mongoose geospatial aggregation-framework