我的 MongoDB 中存储了一个复杂的 geojson 文档。我的目标是检索适用于我的条件的对象,例如:
我想检索'features.properties.name'
字段中包含“avenue”的对象。我试过这个:db.LineString.find({'features.properties.name' : "Avenue"})
结果:
如您所见,这将返回整个文档。我的目标只是返回object 0
满足给定条件的突出显示的对象。另外,结果可以以某种方式可视化吗?
我的 MongoDB 中存储了一个复杂的 geojson 文档。我的目标是检索适用于我的条件的对象,例如:
我想检索'features.properties.name'
字段中包含“avenue”的对象。我试过这个:db.LineString.find({'features.properties.name' : "Avenue"})
结果:
如您所见,这将返回整个文档。我的目标只是返回object 0
满足给定条件的突出显示的对象。另外,结果可以以某种方式可视化吗?
经过大量研究,我找到了一种实际查询特定对象并使用 RoboMongo 和Google Drag and Drop GeoJSON可视化它们的方法。
对于查询部分,我们可以使用此处指定的以下技术:
//[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。
但是,在使用空间数据时,您可能希望将数据放在地图中,尤其是在使用复杂结构时。为此,您需要将数据从JSON 转换为 GeoJSON。下面我将展示我用来转换文件的正则表达式。
算法 JSON 文件(从 MongoDB 生成)到 GeoJSON:
"features" : \{.*
AND "coordinates"[^}]*\K\}
AND "type" : "Feature"
AND "ok" : 1.0000000000000000
AND "id".*, **AND**
“_id”:ObjectId(.*`"type" : "FeatureCollection",[^}]*\}
,和WITH "type" : "Feature",
"result" : [
"features" : [
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features" : [
我使用 Notepad++ 运行这些正则表达式:
"features" : \{.*|"coordinates"[^}]*\K\}|"type" : "Feature"|"ok" : 1.0000000000000000|"id".*,|"_id" : ObjectId\(.*,
"type" : "FeatureCollection",[^}]*\},
用。。。来代替 "type" : "Feature",
免责声明:请注意,您的文件可能遵循不同的结构,因为您投影数据的方式显然会影响输出文件。在这种情况下,需要进行额外的修改。
现在我们有了 GeoJSON 文件,我们可以将它拖放到Google 的 GeoJSON API中。上述查询将为我们提供名称中包含“Avenue”的温哥华道路:
想法: 我相信这项工作可以直接从 RoboMongo 完成,因为生成的 JSON 可以通过一些较差的更改转换为 GeoJSON。另请注意,此REGEX太复杂了,如果您对更稳定的解决方案感兴趣,我建议您使用 JSON 库(如NodeJS、Jackson等)并生成一个全新的文件。我想出了这个解决方案并且它有效非常适合我的情况。
享受 :)
find(arg1)
您使用的命令返回存储在集合中的文档,因此它可以搜索嵌套文档,但不能返回顶级集合文档的一部分。它返回所有文档。
如果您的文档结构经常尝试使用这个
find(arg1, arg2)
而是限制返回的字段https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/
如果您的文档结构不规则,请使用您喜欢的编程语言编写脚本