按字节大小对MongoDB文档进行排序

时间:2015-05-07 23:44:57

标签: mongodb

我想知道是否可以按文件大小(以字节/ kb为单位)对MongoDB集合进行排序。我一直在查看db.collection.stats()但是这只给了我关于集合的信息,而不是文档。

2 个答案:

答案 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" } }
  }}
])