gpt4 book ai didi

mongodb - 递归查询?

转载 作者:可可西里 更新时间:2023-11-01 09:56:53 30 4
gpt4 key购买 nike

我是 mongodb 的新手。

假设我的数据库中有一个“文件系统”层次结构:

db.directories.save({ _id: "root", directories: ["src", "lib"], files: ["config.cfg"] })
db.directories.save({ _id: "src", directories: [], files: ["file1.js", "file2.js"] })
db.directories.save({ _id: "lib", directories: [], files: [] })

db.files.save({ _id: "config.cfg", size: 2310 })
db.files.save({ _id: "file1.js", size: 5039 })
db.files.save({ _id: "file2.js", size: 1299 })

如何获取文件夹的总大小?

即“根”目录总大小=文件总大小+子目录总大小

最佳答案

关于哪种模式最适合您描述的访问模式类型的问题在一些示例中得到了回答,讨论了如何在 MongoDB/文档数据库中表示层次结构。

适用于许多不同查询的常见答案是在每个文件中存储其名称、大小、直接父级及其所有祖先的数组。

这将使您的示例数据:

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 })

现在,如果您想查询“此目录中的文件”或“此目录下的所有文件(包括递归)”之类的内容,您可以查询:

db.files.find( { parent: "root" } )    // all files in /src directory
db.files.find( {ancestors: "root"} ) // all files under /root directory tree

由于您需要使用聚合框架来获取诸如总和之类的东西,因此对文件夹大小的查询将是:

db.files.aggregate([
{$match:{ancestors:"src"}},
{$group:{
_id: "src",
total_size: {$sum:"$size"}
}
}
]);

要查看根文件夹中所有文件夹的大小,它将是:

db.files.aggregate([
{$match:{ancestors:"root"}},
{$group:{
_id: "root",
total_size: {$sum:"$size"}
}
}
]);

关于mongodb - 递归查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845585/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com