經過多番研究中,我發現了一種實際查詢特定對象並使用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。
然而,隨着空間數據時,你可能會喜歡在地圖數據,尤其是結構複雜的工作時。爲此,您需要將數據從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" : [
我運行使用記事本這些正則表達式++:
"features" : \{.*|"coordinates"[^}]*\K\}|"type" : "Feature"|"ok" : 1.0000000000000000|"id".*,|"_id" : ObjectId\(.*,
"type" : "FeatureCollection",[^}]*\},
更換W¯¯第i個"type" : "Feature",
免責聲明:請注意,您的文件可能按照不同的結構,因爲這樣你項目中的數據明顯效果的輸出文件。在這種情況下,需要額外修改。
既然我們有GeoJSON文件,我們可以將它拖放到Google's GeoJSON API。上面的查詢將會給我們溫哥華的,其中包含了自己的名字「大道」的道路:
![enter image description here](https://i.stack.imgur.com/KFmrG.png)
思考: 我相信,這個任務可以直接從RoboMongo完成,因爲所生產的JSON可以轉換爲GeoJSON並進行了一些較差的更改。另請注意,這個REGEX太複雜了,如果你對更穩定的解決方案感興趣,我建議你使用一個像NodeJS,Jackson等JSON庫,並生成一個全新的文件。我想出了這個解決方案,它的工作完全適合我的情況。
享受:)
@JohnnyHK * elemMatch和$都只返回第一個匹配*。你有任何解決方案來返回所有**比賽嗎? –
如果您想要所有的匹配,請參閱使用'aggregate'的那個問題的答案。 – JohnnyHK
@JohnnyHK非常感謝。我會對它做更多的研究......你是否知道我是否可以將結果文檔提取爲GeoJSON格式?看起來我可以生成一個'JSON'文件,但不能生成'GeoJSON'文件。 –