问题标签 [mongodb-geospatial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
75 浏览

mongodb - 具有 nearSphere 条件的 MongoDB 查找表达式

我有一个场景,我必须根据他们的位置加入我的餐厅和拉链系列。

餐厅

拉链

现在我必须加入这两个基于 nearSphere 地理空间查询的集合。我应该在 $lookup 管道中使用什么标准。

我尝试的是

但这不起作用。

需要帮忙

0 投票
1 回答
426 浏览

mongodb - 我可以使用其他坐标类型在 MongoDB 中创建二维索引吗?

我正在荷兰建立一个房地产数据的 MongoDB 数据库。我希望能够对我的数据集执行地理空间查询。每个文档都没有经度和纬度坐标,而是称为“Rijksdriehoeks”坐标。这些 Rijksdriehoeks 坐标不符合 MongoDB 对 2d 坐标对的要求,因为它们可以超过 600.000 的值(该系统使用米作为单位)。这是一个问题,因为创建二维索引需要所有坐标对使用经度和纬度,因此值分别在[-180, 180]和之间[-90, 90]

我需要为此数据集创建地理索引以将查询时间减少到可接受的水平,但由于上述问题,创建“旧版”2d 索引会出现此错误:

有什么方法可以说服 MongoDB 接受我的“Rijksdriehoeks”坐标,或者我需要将它们转换为经度和纬度值吗?

0 投票
1 回答
253 浏览

mongodb - 如何存储一个圆并查看它是否与mongodb中的框/ Geojson点重叠

我不确定是否有办法做到这一点。我需要在 mongodb 中有一个圆圈,并使用 $box 使用一个框对该圆圈进行查询,以查看这两个形状是否重叠。但是,Geojson 不支持圆圈。完成这项工作的最佳方法是什么?圆圈存储如下:

我有两个具体问题:

  1. 第一个问题是 maxDistance 与 Geojson 对象存储在同一个对象中,不能用于 $maxDistance 的 $near 查询;它只需要一个数字。
  2. 我在 Google Geocoding Api 上进行了部分邮政编码/邮政编码搜索,它返回一个带有两个角坐标的框,如下所示:

    “几何”:{“边界”:{“东北”:{“纬度”:43.710565,“lng”:-79.37363479999999},“西南”:{“纬度”:43.690848,“lng”:-79.40025399999999}}据我所知,我不能使用 $box,因为它只适用于 $geoWithin。

编辑1: 我最初的圆圈和盒子计划发生了变化,主要是因为我没有找到适合这个问题的有效解决方案。现在我不是检查圆圈是否与框重叠,而是检查 Geojson 点是否在圆圈内,如下所示:

这里的问题是我必须先在 100 KM 内运行查询,然后在聚合的另一个阶段检查距离。 有没有更有效的方法来实现这一点?谢谢。

0 投票
1 回答
219 浏览

mongodb - MongoDB:将一个集合中的点与另一个集合中的多边形匹配

我正在尝试将一个集合中的点与存储在另一个集合中的区域进行匹配。以下是文档示例。

要点:

地区:

我试图构建的查询是这样的:

我收到一个错误:

断言:命令失败:{

} : 聚合失败

我注意到 $geoWithin 文档的结构与每个区域的结构相同。所以我尝试了这样的查询:

错误是一样的。

我查找了地理查询,但令人惊讶的是,所有发现的提及都有静态区域文档,而不是从集合中获取的。所以我想知道 - 是否有可能将点与两个文档集合都不是静态的并且取自数据库的区域进行映射?

0 投票
1 回答
295 浏览

node.js - 使用 mongodb 获取带有 $box 的文档,并为具有特定坐标点的每条记录添加距离字段

案子

我已使用 2dsphere 索引将位置坐标存储在 MongoDB 集合中。我想获取包含在地图特定范围内的记录。我有一个固定的经纬度坐标点。我已经在 MongoDB 聚合中$geoWithin使用了该方法。$box我能够正确获取数据。

问题

我需要在我拥有的一个固定纬度和经度的每条记录中添加距离字段。

现在我有坐标数组[-0.0649729793707321, 51.50160291888072]

我需要从上述点开始的每条记录的距离。如何使用 MongoDB 聚合找到这个距离场?

数据库记录的示例文档

0 投票
1 回答
132 浏览

php - MongoDB Geospatial,项目匹配多点

通过带有 Aggregate 的 MongoDB $geoNear 命令,我无法生成查询的 maxDistance 字段内的位置。

使用 includeLocs 的文档声明“指定了标识用于计算距离的位置的输出字段。当位置字段包含多个位置时,此选项很有用。”,但是 includeLocs 字段包括所有多点位置。

mongodb 是否能够仅投影匹配的多点而不是存储的整个集合?

0 投票
1 回答
84 浏览

node.js - 无法提取地理键 - 使用 Atlas 而不是本地 MongoDB

请参考这个问题这里

我有同样的问题,除了我没有提供任何地理数据。

下面是我的模型的地理数据实现部分

以下每个案例的相同请求正文

下面连接本地MongoDB时的响应

连接到下面的 MongoDB Atlas 时的响应(已删除无关药水)

可以看出,本地数据库在为“位置”创建空数组时会引发错误,但 Atlas 做得很好。请帮我找出原因。

Mongoose:5.9.7 Mockgoose:未在项目中使用 MongoDB:4.2.3(本地和 Atlas 两者)

0 投票
1 回答
19 浏览

mongodb - 是否可以将 mongoDB 地理空间索引与网格 FS 一起使用

我有一个超过 16MB 的大型 geojson 功能集合。我希望将数据插入 MongoDB,以便我可以利用 MongoDB 提供的地理空间功能($geoIntersects、$geoWithin 等)。由于文件很大,我无法将数据存储在一个 MongoDB 文档中。

我已经使用 GridFS 在 MongoDB 中将文件分成几个块,但我现在不确定我现在是否可以利用我想要的地理空间功能。

有谁知道这是否可行,如果可以,做这种事情的最佳方法是什么?

0 投票
0 回答
231 浏览

javascript - 我的 mongoDB $near 查询的结果未排序

当我使用 mongoose 和 mongoDB$near地理空间运算符(也尝试过$nearSphere)对我的 MongoDB 数据库进行查询时,我的代码返回 200 HTTP 状态以及正确的文档列表,但它们没有从最近到最远排序(不幸的是,这违背了$near操作员)。

我确保在我的geometry密钥上创建了一个“2dsphere”索引,并且该密钥是根据 GeoJson 指南进行格式化的。

这是我用来查询数据库的代码:

纬度和经度在哪里Floats

从我的应用程序返回的前 3 个对象如下:

请注意,我故意不在返回的对象中包含 GeoJson 键,但它们存在于数据库的每个文档中。

我错过了什么吗?

提前致谢!

0 投票
1 回答
132 浏览

mongodb - MongoDB 是否使用 $nearSphere 运算符提供到点的距离?

$nearSphereMongoDB 运算符能够返回按递增距离排序的给定点(指定为运算符的参数)附近的文档。

但是,如何获得实际距离?有没有办法使用 MongoDB 功能来获得这个?使用$nearSphere(尽管我检查了它的文档并且我没有找到此信息)或使用其他机制(可能是聚合框架?)

谢谢!