【问题标题】:MongoDB Insert Polyline and query nearbyMongoDB插入折线并查询附近
【发布时间】:2015-05-06 11:51:01
【问题描述】:

我有一系列点形成一条折线(路径)。我需要将它存储在mongodb中并在附近点查询。

如何在mongodb中存储折线?

我可以用 $near 查询它吗?

折线保存到mongodb后,我会有一个点和点的距离,需要查询db。

编辑:

我没有使用 GPS 跟踪用户的位置,我需要将路径保存在 mongodb 中,如何执行此操作?

然后用户可以在他的位置附近搜索一定距离的路径,所以我需要使用 $near 函数搜索 mongodb。

【问题讨论】:

  • documentation 中列出了可用的类型。除此之外,您通常最好通过解释您的用例和您想要实现的结果来提问。像这样清晰的解释可以让其他人“跳出框框”思考你目前的想法。
  • 所以你的意思是LineString,对吧?映射路径的坐标列表。支持。
  • 对了,我能知道怎么做吗?
  • 你能告诉我如何使用java将行字符串插入mongodb吗?
  • 如果您指的是提供的答案不在 Java 驱动程序语法中,那么我会说 1. 翻译并不难,2. 驱动程序中有将 JSON 转换为 BSON 对象的内置操作司机所期望的,3. 该答案为您提供了以前没有的见解并且很有用,4. 如果您对答案有任何说明,请回复答案而不是您的问题。

标签: mongodb mongodb-query geospatial mongodb-java


【解决方案1】:

所以你想要的其实是LineString GeoJSON 类型,MongoDB 支持的:

{ 
    "loc": { 
        "type": "LineString", 
        "coordinates": [ [ 40, 5 ], [ 41, 6 ] ] 
     }
}

这允许您沿“路径”记录一组“坐标”,您希望将其作为单一对象包含在数据存储中。这样做的主要优点是您可以对这样一个对象(而不是一个不同的“点”)进行地理空间查询,并将单个文档中连接“点”的整个“集合”检索为“最近”。更好的是“多个形状” "这样搭配起来就轻松了。

那么您可以根据需要使用$near 或其他运算符进行查询:

db.collection.find({
    "loc": {
        "$near": {
            "$geometry": {
                "type": "Point",
                "coordinates": [ 41,5 ]
            },
            "$maxDistance": 10000
        }
     }
})

查询中的$near 运算符将返回按“最近”排序的结果到查询的 GeoJSON 对象或提供给查询的旧坐标点。

这基本上对你有用。

【讨论】:

  • 我可以使用 java 驱动程序在 mongo shell 中插入这样的线串,但是当我尝试将它插入 mongo 服务器时,它会抛出错误,因为“预期位置对象,位置数组格式不正确”
  • @Achuthan 总体思路是使用 mongo shell 并在可以“玩”的本地实例上尝试“原型设计想法”。除了我的一般 80%/20% 规则,即编程主要是关于解决问题的能力之外,下一个上下文是“测试”、“测试”和“测试”。我给了你一个小样本,它可以在任何地方重现,所以先做这个,然后解决剩下的问题。
  • 我只是想知道错误信息是什么,好的,这不是问题,我会找到解决方案的。感谢您的帮助
  • @Achuthan 什么错误信息?在什么情况下?只需将上述内容输入外壳并“学习”即可。它适用于世界其他地方,您需要了解这一点。
猜你喜欢
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
相关资源
最近更新 更多