如何找到 MongoDB 集合中占用大量空间的元素?
如果我有一个包含数千个元素的集合,有没有一种方法可以轻松找到哪些元素占用了最多的空间(以 MB 为单位)?
If I have a collection with thousands of elements, is there a way I can easily find which elements are taking up the most space (in terms of MB)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没有内置的查询,您必须迭代集合,收集每个文档的大小,然后进行排序。它的工作原理如下:
此时,您将拥有一个哈希映射,其中文档 ID 作为键,其大小作为值。
请注意,使用这种方法,您将通过网络获取整个集合。另一种方法是使用 MapReduce 并在服务器端(在 mongo 内部)执行此操作:
inline:1 告诉 mongo 不要为结果创建临时集合,所有内容都将保存在 RAM 中。
以及我的收藏之一的示例输出:
There's no built-in query for this, you have to iterate the collection, gather size for each document, and sort afterwards. Here's how it'd work:
At this point you'll have a hashmap with document ids as keys and their sizes as values.
Note that with this approach you will be fetching the entire collection over the wire. An alternative is to use MapReduce and do this server-side (inside mongo):
inline:1 tells mongo not to create a temporary collection for results, everything will be kept in RAM.
And a sample output from one of my collections:
想通了这一点!我使用 Object.bsonsize() 分两步完成此操作:
Figured this out! I did this in two steps using Object.bsonsize():