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

どのようにして1つのレベルのキーしか取得できませんか?例えば。私はdirの下のキーだけを取得したい。結果には[subDirsubDir_2、...]とその他のものは含まれていない必要があります。値がなく、ネストされたキーがありません。これを実行する最も効果的な方法は何ですか?MongoDB:子供がいない特定の深度/ネスティングで見つける方法

+0

[こちらをチェック](http://stackoverflow.com/questions/2298870/mongodb-get-names-of-all-keys-in-collection) – Yogesh

+0

あなたがいる各文書の構造や自分の鍵を知っていますかbe be for beはどんな深さにあってもいい? –

+0

各特定の瞬間に@NenadVracar私は正確に私が検索したい場所を知るでしょう。私はこのノードまでの正確なノードとパスを知るでしょう。私が必要とするのは、その中の鍵ですが、深くはありません。 – stkvtflw

答えて

0

あなたの目標を達成する唯一の方法は、再帰的 map-reduceを使用することです。このようにして、到達したい深さに対応できます。 単純な要素、オブジェクト、または配列があるかどうかを確認するには、各深度レベルを確認する必要があります。さらに、map-reduceはBSONからJSONへの文書を変換して作業に戻さなければならないので、データを処理する速度が遅いため、パフォーマンスはあまり良くありません。 このアプローチを使用してmongoDB用のスキーマアナライザを構築しました。あなたが見たい場合はthe linkです。
おそらく、断片化されたクラスタでmap-reduceを使うことはできますが、Hadoopを使う方が良いでしょう!より効率的なパフォーマンスのためにはElasticsearchを使用します。

関連する問題