我想知道是否可以按文件大小(以字节/ kb为单位)对MongoDB集合进行排序。我一直在查看db.collection.stats()但是这只给了我关于集合的信息,而不是文档。
答案 0 :(得分:3)
可能的解决方案是在文档中添加额外的“大小”字段,因为文档大小不会经常更改。
为每个文档添加大小:
db.collection.find().forEach(function(doc) {
doc.size = Object.bsonsize(doc);
db.collection.save(doc);
});
按降序排序:
db.collection.find().sort({"size":-1});
另一个解决方案是将所有文档加载到内存中,使用任何编程语言(js,php,java ...)对结果进行排序和打印,如果您的集合很大,则不推荐使用。
答案 1 :(得分:1)
从 Mongo 4.4 开始,运算符 $bsonSize
返回给定文档的大小(以字节为单位)。
找到最大的文件
db.collection.aggregate([
{ $group: {
_id: null,
max: { $max: { $bsonSize: "$$ROOT" } }
}}
])