问题标签 [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 投票
1 回答
94 浏览

mongodb - 精度会影响 MongoDB 地理空间查询的性能吗?

考虑以下查询:

如果坐标不太精确,期望性能提升是否合理?如果是这样,多少?

如果您有关于性能调整 mongo 地理空间查询的文档的链接,则可以加分。

0 投票
1 回答
126 浏览

mongodb - mongoDB地理空间查询不起作用

我正在尝试提取多边形(规则或不规则)内的所有元素,但 mongoDB 地理空间不起作用。

当我像这样进行查询时,效果很好

但如果尝试使用 查询geoWithin,则不会返回任何内容

欢迎任何帮助或想法

0 投票
0 回答
1198 浏览

mongodb - 如何使用 MongoDB 进行边界框查询?

我似乎无法获得与 MongoDB 一起使用的边界框查询,它实际上使用了空间索引。

这是我的索引:

我最初只有2dsphere索引,但后来我看到这个答案说框查询仅适用于2d索引。

当我尝试box查询时,它似乎没有使用任何一个索引:

确实会返回结果,但会执行 aCOLLSCAN并且非常慢。

我也试过这个:

相同的结果 - 返回数据但执行 COLLSCAN。

LatLong是一个GeoJSON对象。这是一个示例文档:

有人可以告诉我我做错了什么吗?

0 投票
0 回答
305 浏览

node.js - nodejs - Mongoose 5.3.8 - GeoJSON 查询不起作用

我正在尝试使用 Mongoose 5.3.8 根据坐标点存储和查询位置,以便返回另一个点半径内的点。我已阅读文档并在以下部分中实现了 pointSchema + citySchema 示例: 使用 GeoJSON 数据如下所示

使用express端点,我使用以下代码和存储为的文档查询 mLab 实例:


上面的查询发现了错误:

我试图通过调用 .index() 在 LocationSchema 上添加索引

我还尝试通过以下方式向架构添加索引:

没有在架构上创建索引并且错误仍然存​​在。


我尝试了其他几种模式/查询组合,包括:

  1. Mongoose 地理空间搜索:距离不起作用- 2016 年 2 月 7 日
  2. Mongoose 地理空间查询 $near - 2018 年 4 月 10 日
  3. 无法找到 $geoNear 查询的索引 #6549 - 2018 年 5 月 31 日
  4. Net Ninja 的 GeoJSON 教程- 2017 年 3 月 27 日

尽管使用附近的坐标进行查询,但我没有让他们返回另一个点半径内的点。我不明白这是哪里出了问题。

  • 是否有一个地理空间查询的工作示例可以返回猫鼬 5.3.8中另一个点的半径内的点?

编辑:澄清问题

编辑:

让它工作。在连接到 mLab 实例的猫鼬选项中,我的选项如下:

autoIndex: false参数使得即使指定LocationSchema.index({ "location": "2dsphere" });. 为了解决这个问题,我不得不LocationSchema.options.autoIndex = true;出于某种原因添加。希望这可能对某人有所帮助。

0 投票
1 回答
80 浏览

node.js - 如何在 Mongoose 中使用地理空间查询检索文档

我正在尝试对 mongodb 集合使用 mongoose 地理空间查询。“2dsphere”索引已应用于位置对象。

询问

请在下面找到查询:

数据

许多文档之一如下所示:

我试过的

我试图将最大距离设置得尽可能大。但是查询不会检索任何文档。可能是什么问题呢?

0 投票
0 回答
405 浏览

mongodb - java mongodb geonear 使用查询类

我试图在不使用聚合的情况下找到靠近某个点的文档。我想使用 NearQuery 或 Query 类或任何其他。

我尝试了以下查询,但出现异常

1)

2)

3)

例外:

用户 4 集合:

我在 user4 集合中的 loc 属性上创建了 2dsphere 索引。

指数:

请帮助我。谢谢

0 投票
0 回答
231 浏览

mongodb - 如何有效地在具有多个范围的单个字段上查询 Mongodb?

我正在尝试使用 MongoDB 的 B-tree 索引构建自定义地理空间索引,因为我发现 Mongo 的本机实现限制了我自己的情况。为了完成使用复合索引有效搜索 Mongo 的地理空间查询,我需要按location.locIndexKey具有多个范围的字段以及其他字段进行过滤。

到目前为止,我能想出的支持这种查询的唯一解决方案是使用 Mongo 的$or运算符。然而,这表现得很糟糕,因为它是一个or查询,Mongo 必须一次又一次地检查索引上的相同键。为了克服这种低效率,我需要一种方法让 Mongo 在该字段上使用多个索引边界,而不是使用or短语为查询中定义的每个边界复制查询。

这是我的查询:

如您所见,为了在 field 上表达多个范围location.locIndexKey,我不得不使用$or运算符。这是查询计划器执行统计信息的缩短版本:

如果您indexBounds在上面进行检查,您将看到每个范围 forlocation.locIndexKey都应用于单个查询并与or. 但是,如果我选择使用 Mongo 的本地地理空间运算符运行相同的查询$geoWithin

我从查询规划器得到以下响应:

如您所见,Mongo 利用多个索引边界来完成此查询,并且更加有效。

我相信原始查询效率低下的原因是 Mongo 的查询计划器不检查$or表达式中的内容。我认为理解表达式中只有一个具有多个范围的字段并使用多个索引边界构建查询应该更聪明。可悲的是,事实并非如此。

我的问题:有什么方法可以强制 Mongo 为我的查询使用多个索引范围,以便它与本机地理空间查询一样高效?

任何帮助,将不胜感激。

谢谢!

0 投票
0 回答
133 浏览

node.js - 无法在 $geoNear 聚合中使用线串

我试图在聚合查询中使用 $geoNear 中的 LineString,但无法使用它。我想要任何其他替代方法来使用 LineString 来比较坐标列表。

这是我的功能:

这是我的要求:

这是我在函数中传递数据的方式:

这是我的 mongo 文件:

所以我需要一个可以在聚合函数中使用线串的解决方案。因为我正在避免 for 循环,因为它是一种不好的做法。

编辑:我想比较两个线串,一个来自集合,一个来自请求,如果线串之间的距离小于或等于 1000 米,那么该集合应该返回,这是我的基本要求。

编辑2:我试过这个:

但是得到了这个错误:

0 投票
1 回答
353 浏览

c# - 在查询中过滤多个 Geo near 操作会发送错误

我做了一个过滤器来对我的 Mongodb 数据库中的数据进行地理空间查询,这个过滤器工作正常,直到我使用另一个地理空间过滤器对该过滤器执行“与”操作,但指向我正在查询的集合上的不同属性。当我添加这个过滤器时,我得到一个异常说明:

消息:MongoDB.Driver.MongoCommandException:命令查找失败:geoNear 表达式太多。

这是第一个过滤器,

这是我添加第二个过滤器的方法:

通常,当将 & 应用于两个过滤器时,它可以工作,但在这种情况下,有人对此有解决方案吗?

0 投票
1 回答
125 浏览

mongodb - $center 上的 MongoDB 地理空间索引

集合模式

索引

有 200 万份文档存储在集合中。

首先我像这样运行查询。

db.places.find({ location: {$geoWithin: { $center: [[60.0478308, 40.5237227], 10] } }})

但是需要2秒。所以我通过解释()检查查询。

你知道查询阶段是COLLSCAN.

我想知道,我已经为location字段创建了索引,但它似乎不起作用。

所以我创建了更多索引。

但它也不起作用。

我的索引配置有问题吗?