La pregunta sobre qué esquema encajaría mejor con el tipo de patrón de acceso que describe y respondió en algún ejemplo sobre cómo representar una jerarquía en MongoDB/base de datos de documentos.
Una respuesta común que funciona para muchas consultas diferentes es almacenar en cada archivo su nombre, tamaño, padre directo y matriz de todos sus ancestros.
Eso haría que sus datos de muestra:
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 })
Ahora, si desea consultar cosas como "Archivos en este directorio" o "todos los archivos en este directorio (incluso recursivamente)", consulte:
db.files.find( { parent: "root" } ) // all files in /src directory
db.files.find( {ancestors: "root"} ) // all files under /root directory tree
Dado que necesita usar el marco de agregación para obtener cosas como la suma, la consulta del tamaño de la carpeta sería:
db.files.aggregate([
{$match:{ancestors:"src"}},
{$group:{
_id: "src",
total_size: {$sum:"$size"}
}
}
]);
Para ver el tamaño de todas las carpetas que están en la carpeta raíz sería:
db.files.aggregate([
{$match:{ancestors:"root"}},
{$group:{
_id: "root",
total_size: {$sum:"$size"}
}
}
]);