范围内Lat / Lng的Mongoose查询

时间:2014-05-25 19:12:02

标签: mongodb mongoose geojson

我正在尝试查询给定lat / lng范围内的数据点。你可以像我一样('location.lat')和('location.long')在mongoose查询中引用一个对象的元素吗?如果是这样,我没有从此查询中获取任何数据。我正在查询所有数据点,这工作得很好 - 现在我只是想将查询优化为给定范围内的点。

修改

查询具有新格式的点(请参阅下面的更新架构):

var range = {"topLeft":[-113.51526849999999,53.24204911518776],"bottomRight":[-131.0933935,41.397215826886736],"topRight":[-131.0933935,53.24204911518776],"bottomLeft":[-113.51526849999999,41.397215826886736]};


db.datapoints.find({ 
    geo: {
        $geoWithin : {
            $geometry: {
                type: "Polygon",
                coordinates: [
                  [
                    range.topLeft, range.topRight, range.bottomRight, range.bottomLeft
                  ]
                ]
            }
        }
    }
})

但我得到了:

error: {
    "$err" : "Malformed geo query: { $geoWithin: { $geometry: { type: \"Polygon\", coordinates: [ [ [ -113.5152685, 53.24204911518776 ], [ -131.0933935, 53.24204911518776 ], [ -131.0933935, 41.39721582688674 ], [ -113.5152685, 41.39721582688674 ] ] ] } } }",
    "code" : 16677
}

注意:range参数如下所示:

更新的模式

var mongoose = require('mongoose');

var dataPointSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    geo: {type: [Number], index: '2d'},
    ...
    timestamp: {type: Date, default: Date.now}
    ...
});

1 个答案:

答案 0 :(得分:1)

如下所示:

MongoDB: "Malformed geo query" with $geoIntersect on a polygon

您必须通过使第一个和最后一个点相同来关闭多边形。