0

だから、私が間違っていることについてアドバイスが必要です。

folders私のデータベースは、とで構成されるファイル システムとまったく同じようにセットアップされていますfiles。フォルダーから始まりますが、比較的無限の数のサブフォルダーやファイルを持つことができます。

{
   "name":"folder1",
   "uniqueID":"zzz0",
   "subcontents": [ {"name":"subfolder1", "uniqueID":"zzz1"}, 
                    {"name":"subfile1", "uniqueID":"zzz2"}, 
                    {"name":"subfile2", "uniqueID":"zzz3"}, 
                    {"name":"subfolder2", "subcontents": [...etc...], "uniqueID":"zzz4"}, 
                  ] 
}

各フォルダー/ファイル ドキュメントには一意の ID があり、参照できるようになっています (上の zzz# を参照)。私の質問は、mongoDB クエリを作成して 1 つのドキュメントだけを引き出すことはできますか?

たとえばdb.fileSystemCollection.find({"uniqueID":"zzz4"})、次のような結果が得られるでしょうか。これを行うにはインデックスを使用する必要がありますか? 試してみましたが、クエリは毎回空を返します。

意図した結果 ---> {"name":"subfolder2", "subcontents": [...etc...], "uniqueID":"zzz4"}

[編集] 以下の回答に基づいて、mongoDB の代わりに XML データベースを検討します。json 構造は、MongoDB で動作するように再配置できません (データが多すぎます)。

4

2 に答える 2

3

クリスが述べているように、短い答えはノーです。

ツリーの埋め込み表現は、直感的な理解 (および実装) に非常に適しています。しかし、MongoDB のインデックスを使用してツリーで効果的な検索を行いたい場合は、ツリー ストレージの別の方法を検討することをお勧めします。多くの方法がhttp://docs.mongodb.org/manual/tutorial/model-tree-structures/にリストされています

アクセスパターンに応じて、すべての表現に独自の長所と短所があることに注意してください。

ファイルシステムのような構造の場合、特定のフォルダーのすべてのサブコンテンツを見つけることができる可能性が高いため、これには子参照パターンを使用できます。

{
   "name":"folder1",
   "uniqueID":"zzz0",
   "subcontents": [ "zzz1", 
                    "zzz2", 
                    "zzz3", 
                    "zzz4" 
                  ] 
}

{
  "name":"subfolder1", 
  "uniqueID":"zzz1"
}

...
于 2013-04-18T02:46:59.903 に答える