- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写一个带有 $maxDistance 参数的 $near 查询,该参数的值不是恒定的。例如,我有一个具有位置和覆盖半径的消防站集合,我想找到覆盖半径包括某个特定点的所有消防站。覆盖半径可能因站而异。
我有一个充满文档的集合,如下所示:
{
'loc' : [-72,40],
'radius' : 10
}
查询类似于:
{'loc': { $near : coordinates, $maxDistance : 'radius'}};
但这并不正确。
如果我正在编写 SQL 查询,我会使用类似以下内容的内容:
SELECT * FROM table AS foo WHERE foo.radius ... (whatever your distance method looks like)
但我不知道如何在 mongo 查询中访问该 radius 变量。这可能吗?
最佳答案
你不能完全这样做——一般来说,你不能将 MongoDB 查询中的任何内容基于集合中的值。
但是,从 MongoDB 2.4 开始,我们支持名为 2dsphere
的新索引,它不仅允许您在数据库中存储点,还可以存储多边形。您可以将该信息存储在如下文档中:
db.so.ensureIndex( { loc: '2dsphere' } );
db.so.insert( {
name: "Firestation 1",
loc: {
type: "Polygon",
coordinates: [ [ [ 0, 0 ], [ 0, 1 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ]
}
} );
然后您可以使用“相交”查询来确定某个点是否被每个多边形覆盖:
db.so.find( {
'loc' : {
$geoIntersects: {
$geometry: { type: 'Point', coordinates: [ 0, 0 ] }
}
}
} );
然后返回:
{
"_id" : ObjectId("51f24d566775068ab0b786f0"),
"name" : "Firestation 1",
"loc" : {
"type" : "Polygon",
"coordinates" : [ [ [ 0, 0 ], [ 0, 1 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ]
}
}
这里它找到了消防站,因为 0, 0 位于多边形的中间。现在的技巧当然是计算构成距中心点“半径”(例如 10 公里)的圆的多边形点。您将无法获得真正的圆形,但六边形或八边形应该足够了。其数学原理并不是非常简单,但是 http://www.movable-type.co.uk/scripts/latlong.html#destPoint有一个 JavaScript 示例。只需将方位 Angular 从 0 到 2PI 分 8 步循环即可计算沿圆圆周的点,并将它们放入坐标中。确保将它们嵌入到双重嵌套数组中,并使第一个和最后一个相同:
{
name: "Firestation 1",
loc: {
type: "Polygon",
coordinates: [ [
[ point1-lon, point1-lat ],
[ point2-lon, point2-lat ],
[ point3-lon, point3-lat ],
...
[ point1-lon, point1-lat ],
] ]
}
}
关于javascript - 在 mongodb 地理位置查询中使用对象属性作为 $maxDistance 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17868480/
在我的应用程序中,我尝试使用,RentModel.find({prop_location : { $near : [msg.lat, msg.lng],$maxDistance : 500}},函数(
我将位置存储在 Mongoose 模型中(名称 + 坐标为 [lng, lat])并在其上有一个 2d 索引。 我想获得距离以公里为单位的半径内的一个点(经度、纬度)最近的位置。 为此,我使用了 mo
我似乎无法找到此信息。但是使用地理搜索,您可以指定 $maxDistance 但对于我的一生,我找不到英里、公里等。 这是我正在使用的示例查询: db.hotels.find( { location:
我对标题感到抱歉。我很难描述。我有这个收藏 { "_id" : ObjectId("55cb9c666c522cafdb053a68"), location: {
我想编写一个带有 $maxDistance 参数的 $near 查询,该参数的值不是恒定的。例如,我有一个具有位置和覆盖半径的消防站集合,我想找到覆盖半径包括某个特定点的所有消防站。覆盖半径可能因站而
我正在使用node.js 和mongoose。我的数据库中有 4 个带有 lng/lat 坐标的对象。在现实生活中,这些位置彼此相距不到 1 或 2 英里。 module.exports.locati
我有一个集合,其中包含这样的文档: { "_id" : "cysMrqjootq6YS6WP", “profile” : { …… "deliveryD
我正在使用 MongoDB 的 C# 驱动程序,并试图让 Query.Near 返回中心点 5、10、25 或 50 英里范围内的待售房屋。这是查询: var near = Query.Near("C
我有以下查询,它使用 mongoDB find() 的“2dsphere”索引根据经度和纬度返回结果,但是当我在聚合中使用相同的查询时,$ maxDistance 不起作用并且始终显示相同的结果。 d
我正在尝试了解 MongoDB 和地理空间搜索。基本上我想要的是让用户能够查询文档(图像)在距用户当前位置的设定距离内拍摄。因此,我的用户正在搜索从他站立的位置 1 公里内拍摄的所有图像,我尝试使用以
根据 Apple Developer Guide,maxDistance = "从相关纬度和经度到传递相关的最大距离(以米为单位)。这个数字是比较到传递的默认距离,并使用较小的值。” 因此我们可以为任
我正在尝试在 MongoMapper 支持的模型中封装一个具有 maxDistance 的近查询。 我一定是在我的查询语法中做了一些愚蠢的事情。 模型 class Site include Mon
目前我们在 MongoDB 3.2.9 中的 $near 操作上遇到了很大的麻烦。 问题是在创建游标时存在无限负载 - 直到超时。这个问题只会在我们不使用 $maxDistance 时出现——在我们的
我想查询 mongo-db 中的地理空间索引(根据本教程 http://www.mongodb.org/display/DOCS/Geospatial+Indexing 设计)。 因此,当我从 she
当我尝试从 Mongo shell 中查找距犹他州盐湖城 50 公里范围内的所有成员时,我收到错误消息: error: { "$err" : "point not in interval of
因此,如果我们像这样使用 maxDistance 运行 GeoSpatial MongdoDB 查询: db.getCollection('Places').aggregate([{ "$geoN
这似乎是一个常见的错误,但我似乎无法让它与我看到的所有建议一起工作。这是我的设置: // point.js (based on mongoose recommended subdocument pat
我是一名优秀的程序员,十分优秀!