Spørgsmålet om, hvilket skema der bedst passer til den type adgangsmønster, du beskriver, og besvaret i nogle eksempler, taler om, hvordan man repræsenterer et hierarki i MongoDB/dokumentdatabase.
Et almindeligt svar, der fungerer til mange forskellige forespørgsler, er, hvor du i hver fil gemmer dens navn, størrelse, direkte overordnede og række af alle dens forfædre.
Det ville gøre dine eksempeldata:
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 })
Hvis du nu vil forespørge efter ting som "Filer i denne mappe" eller "alle filer under denne mappe (inklusive rekursivt)", spørger du:
db.files.find( { parent: "root" } ) // all files in /src directory
db.files.find( {ancestors: "root"} ) // all files under /root directory tree
Da du skal bruge aggregeringsramme for at få ting som sum, ville forespørgslen om mappestørrelse være:
db.files.aggregate([
{$match:{ancestors:"src"}},
{$group:{
_id: "src",
total_size: {$sum:"$size"}
}
}
]);
For at se størrelsen på alle mapper, der er i rodmappen, ville det være:
db.files.aggregate([
{$match:{ancestors:"root"}},
{$group:{
_id: "root",
total_size: {$sum:"$size"}
}
}
]);