2015-10-22 45 views
0

我有存儲在我的MongoDB的複雜GeoJSON的文件。我的目標是獲取適用於我的病情e.g對象:查詢的文檔和可視化特定的對象 - MongoDB的

我要檢索包含「大道」在'features.properties.name'領域的對象。我曾嘗試這樣的:db.LineString.find({'features.properties.name' : "Avenue"})導致:

enter image description here

正如你所看到的,這將返回整個文檔。我的目標是返回符合特定條件的突出顯示的object 0之類的對象。另外,結果可以以某種方式可視化嗎?

+0

@JohnnyHK * elemMatch和$都只返回第一個匹配*。你有任何解決方案來返回所有**比賽嗎? –

+0

如果您想要所有的匹配,請參閱使用'aggregate'的那個問題的答案。 – JohnnyHK

+0

@JohnnyHK非常感謝。我會對它做更多的研究......你是否知道我是否可以將結果文檔提取爲GeoJSON格式?看起來我可以生成一個'JSON'文件,但不能生成'GeoJSON'文件。 –

回答

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。

然而,隨着空間數據時,你可能會喜歡在地圖數據,尤其是結構複雜的工作時。爲此,您需要將數據從JSON轉換爲GeoJSON。下面我將顯示我用來轉換文件的正則表達式。

算法JSON文件(從MongoDB的生成)到以GeoJSON:

  1. 擦除:"features" : \{.*AND"coordinates"[^}]*\K\}AND"type" : "Feature"AND"ok" : 1.0000000000000000AND"id".*, **AND** 「_id」:的ObjectId(。*`
  2. 替換:"type" : "FeatureCollection",[^}]*\}WITH"type" : "Feature","result" : ["features" : [ { "type": "FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features" : [

我運行使用記事本這些正則表達式++:

  1. "features" : \{.*|"coordinates"[^}]*\K\}|"type" : "Feature"|"ok" : 1.0000000000000000|"id".*,|"_id" : ObjectId\(.*,
  2. "type" : "FeatureCollection",[^}]*\},更換W¯¯第i個"type" : "Feature",

免責聲明:請注意,您的文件可能按照不同的結構,因爲這樣你項目中的數據明顯效果的輸出文件。在這種情況下,需要額外修改。

既然我們有GeoJSON文件,我們可以將它拖放到Google's GeoJSON API。上面的查詢將會給我們溫哥華的,其中包含了自己的名字「大道」的道路:

enter image description here

思考: 我相信,這個任務可以直接從RoboMongo完成,因爲所生產的JSON可以轉換爲GeoJSON並進行了一些較差的更改。另請注意,這個REGEX太複雜了,如果你對更穩定的解決方案感興趣,我建議你使用一個像NodeJSJackson等JSON庫,並生成一個全新的文件。我想出了這個解決方案,它的工作完全適合我的情況。

享受:)

0
find(arg1) 

您使用的命令返回文檔存儲在集合中,因此它可以搜索嵌套的文檔,但不能返回頂級集合文檔的一部分。它返回所有文檔。

如果您的文檔結構經常嘗試使用此

find(arg1, arg2) 

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

,如果你的文檔結構不規則,編寫一個腳本與您最喜愛的編程語言