2016-12-06 77 views
3
root: { 
    dir: { 
    subDir: { 
     subSubDir: { 
     ... 
     }, 
     ... 
    }, 
    subDir_2: { 
     ... 
    } 
    }, 
    dir_2: { 
    ... 
    }, 
    ... 
} 

如何檢索只有一個級別的密鑰?例如。我只想檢索dir下的密鑰。結果應該包含[subDir,subDir_2,...],而不是別的:沒有值,沒有嵌套的關鍵等。什麼是最高性能的方式來做到這一點?MongoDB:如何找到特定的深度/嵌套沒有子女

+0

[檢查此](http://stackoverflow.com/questions/2298870/mongodb-get-names-of-all-keys-in-collection) – Yogesh

+0

你知道每個文檔的結構或你是尋找可以在任何深度? –

+0

@NenadVracar在每個特定的時刻,我會知道我究竟在哪裏搜索。我會知道確切的節點和路徑,直到這個節點。我所需要的只是其中的關鍵,而不是更深。 – stkvtflw

回答

0

我認爲實現您的目標的唯一方法是使用遞歸 map-reduce。這樣你就可以處理你想要達到的深度。 你必須檢查每個深度級別,看看是否只有一個簡單的元素,對象或數組。除了性能不會很好,因爲map-reduce處理數據的速度很慢,因爲它們必須將文檔從BSON轉換爲JSON並返回工作。 我用這種方法爲mongoDB構建了一個模式分析器。這裏是the link,如果你想看看。
也許你可以在分片集羣中使用map-reduce,但它更好的Hadoop!或Elasticsearch以獲得更高效的性能。