4

私の状況を説明する最も簡単な方法は、私が達成したいことに近い標準のファイルシステム構造を使用することです。

Folder A
- Folder A2
-- File 1
-- File 2
- File 3
Folder B
- Folder B2
- Folder B3
-- File 4

フォルダにはフィールドがあります:

- _id
- parents (in my case there can actually be multiple!)

ファイルにはフィールドがあります

- _id
- targetFolder

したがって、基本的に、ファイルは階層内で非常に深いものになる可能性があります。

データベースを効率的に検索および構造化して、深いフォルダー階層を作成し、それらのいずれかにファイルを含めるにはどうすればよいですか。

たとえば、 Folder A の下にあるすべてのファイルを返すクエリを実行できるようにしたいと考えています。どうすればこれを行うことができますか?

4

3 に答える 3

5

このトピックに関する MongoDb の公式ドキュメントをお勧めします。ツリーをデータベースに保存することは簡単ではなく、すべてのソリューションには長所と短所があります。マテリアライズド パス モデルは、階層検索では非常に効率的ですが、すべての子孫ノードを更新する必要があるため、ツリーの変更にはコストがかかります。

于 2013-09-05T07:38:34.393 に答える
1

私は次のスキーマを行います:

コレクション名ファイル:

{
 _id:id1 (generated unique id),
 name: file2
 type: file
 parents:[id2,id3] -> parent directories FolderA2,FolderA 
}
{
 _id:id2 (generated unique id),
 name: folderA2
 type: directory
 parents:[id3]
}
{
 _id:id3 (generated unique id),
 name: folderA
 type: directory
 parents:[] 
}

次に、親にマルチキー インデックスを作成し、次のようなクエリを実行できます。このスキーマは、新しいファイルまたはフォルダー (ディレクトリ) を追加するときに、隣接するファイルまたはディレクトリから親の ID を取得して親を埋める必要があるため、複雑な挿入です。

お役に立てれば

于 2013-09-04T20:37:01.877 に答える