Pertanyaan tentang skema apa yang paling sesuai dengan jenis pola akses yang Anda gambarkan dan dijawab dalam beberapa contoh berbicara tentang bagaimana merepresentasikan hierarki dalam database MongoDB/document.
Jawaban umum yang berfungsi untuk banyak kueri berbeda adalah tempat Anda menyimpan di setiap file nama, ukuran, induk langsung, dan larik semua leluhurnya.
Itu akan membuat data sampel Anda:
db.files.save({ _id: "root"})
db.files.save({ _id: "src", parent: "root", ancestors: ["root"] } )
db.files.save({ _id: "lib", parent: "root", ancestors: ["root"]} )
db.files.save({ _id: "config.cfg", parent: "root", ancestors: ["root"], size: 2310 })
db.files.save({ _id: "file1.js", parent: "src", ancestors: ["root","src"], size: 5039 })
db.files.save({ _id: "file2.js", parent: "src", ancestors: ["root","src"], size: 1299 })
Sekarang jika Anda ingin menanyakan hal-hal seperti "File di direktori ini" atau "semua file di bawah direktori ini (termasuk secara rekursif)" Anda menanyakan:
db.files.find( { parent: "root" } ) // all files in /src directory
db.files.find( {ancestors: "root"} ) // all files under /root directory tree
Karena Anda perlu menggunakan kerangka kerja agregasi untuk mendapatkan hal-hal seperti jumlah, kueri untuk ukuran folder adalah:
db.files.aggregate([
{$match:{ancestors:"src"}},
{$group:{
_id: "src",
total_size: {$sum:"$size"}
}
}
]);
Untuk melihat ukuran semua folder yang ada di folder root adalah:
db.files.aggregate([
{$match:{ancestors:"root"}},
{$group:{
_id: "root",
total_size: {$sum:"$size"}
}
}
]);