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

Fra*_*Kim 3 mongodb

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

anh*_*hlc 5

考虑到文档大小不经常更改,一个可能的解决方案是在文档中添加额外的“大小”字段。

要添加每个文档的大小:

db.collection.find().forEach(function(doc) {
    doc.size = Object.bsonsize(doc); 
    db.collection.save(doc);
});
Run Code Online (Sandbox Code Playgroud)

要按降序排序:

db.collection.find().sort({"size":-1});
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是加载内存中的所有文档,使用任何编程语言(js、php、java...)排序并打印结果,如果您的集合很大,则不建议这样做。


sid*_*ate 5

从 Mongo 4.4 开始,运算符$bsonSize返回给定文档的大小(以字节为单位)。

找到最大的文档

db.collection.aggregate([
  { $group: {
    _id: null,
    max: { $max: { $bsonSize: "$$ROOT" } }
  }}
])
Run Code Online (Sandbox Code Playgroud)