查询文档中的特定对象&可视化 - MongoDB

时间:2015-10-22 16:17:21

标签: mongodb geospatial geojson robo3t nosql

我的MongoDB中存储了一个复杂的geojson文档。我的目标是检索适用于我的条件的对象,例如:

我想要检索包含" avenue"的对象。在'features.properties.name'字段中。我试过这个:db.LineString.find({'features.properties.name' : "Avenue"})结果:

enter image description here

如您所见,这将返回整个文档。我的目标只是返回满足给定条件的突出显示的object 0之类的对象。此外,结果可以以某种方式可视化吗?

2 个答案:

答案 0 :(得分:0)

find(arg1)

命令使用带有存储在集合中的文档的返回,因此它可以搜索嵌套的文档,但不能返回顶级集合文档的一部分。它返回所有文档。

如果您的文档结构经常尝试使用此

find(arg1, arg2)

而是限制返回的字段https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/

如果您的文档结构不规则,请使用您喜欢的编程语言编写脚本

答案 1 :(得分:0)

经过大量研究,我发现了一种实际查询特定对象并使用RoboMongo和Google Drag and Drop GeoJSON对其进行可视化的方法。

对于查询部分,我们可以使用指定here的以下技术:

//[Thematic]  Finds all the LineString documents that contain “Avenue” in their name.
db.LineString.aggregate(
 { $match : {
     "features.properties.name": /avenue/i
  }},
  { $unwind : "$features" },
  { $match : {
     "features.properties.name": /avenue/i
  }}
)

这里我们使用$unwind聚合阶段来定义我们想要检索的字段。之后,我们使用$match来检索具有特定条件的文档。请注意,第一个匹配可以利用索引(文本,空间等...)并将时间固定很多。通过右键单击MongoDB中的文档,我们可以查看+存储生成的JSON。

但是,使用Spatial数据时,您可能希望将数据放在地图中,尤其是在处理复杂结构时。为此,您需要将数据从 JSON转换为GeoJSON 。下面我将展示我用来转换文件的正则表达式。

算法JSON文件(从MongoDB生成)到GeoJSON:

  1. 删除:"features" : \{.* AND "coordinates"[^}]*\K\} AND "type" : "Feature" AND "ok" : 1.0000000000000000 < strong> AND "id".*, **AND**&#34; _id&#34; :ObjectId(。*`
  2. 替换:"type" : "FeatureCollection",[^}]*\} WITH "type" : "Feature", AND "result" : [ WITH "features" : [ { "type": "FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features" : [
  3. 我使用Notepad ++运行这些正则表达式:

    1. "features" : \{.*|"coordinates"[^}]*\K\}|"type" : "Feature"|"ok" : 1.0000000000000000|"id".*,|"_id" : ObjectId\(.*,
    2. "type" : "FeatureCollection",[^}]*\}, 替换为 "type" : "Feature",
    3.   

      免责声明:请注意,您的文件可能遵循不同的结构,因为您投影数据的方式显然会影响输出文件。在这种情况下,需要进行额外的修改。

      现在我们有了GeoJSON文件,我们可以将其拖放到Google's GeoJSON API。以上问题将为我们提供包含&#34; Avenue&#34;在他们的名字上:

      enter image description here

      <强>思想: 我相信这项工作可以直接从RoboMongo完成,因为生成的JSON可以转换为GeoJSON,但有一些较差的变化。另请注意,此REGEX过于复杂,如果您对更稳定的解决方案感兴趣,我建议您使用NodeJSJackson等JSON库并生成品牌新文件。我提出了这个解决方案,它完全符合我的情况。

      享受:)