我尝试使用c#构建一个应用程序,首先将文档保存到mongodb,然后检查文档的大小。我已经找到了使用mongodb shell检查大小的方法,但我似乎无法找到与c#驱动程序相同的功能。我以为我可以通过创建一个包含BsonObject.size()的命令文件来实现它,但是我无法让它工作。
答案 0 :(得分:2)
运行C#等效的db.coll.stats()(如yaoxing建议的那样)将返回集合的大小和平均文档大小,但不返回一个特定文档的实际大小。
引用Robert Stam的回答 this Google Groups discussion
ToBson()。长度是获取BsonDocument长度的唯一方法。(其中,长度是指转换为二进制BSON流时BsonDocument所需的字节数)。您可以编写一个计算BsonDocument长度的函数,但无论如何它都必须完成与ToBson一样多的工作。 但最简单的方法就是使用ToBson()。长度
示例:
BsonDocument doc = coll.FindOne(Query.EQ("_id", ObjectId.Parse("DOC _id HERE")));
int bytesSize = document.ToBson().Length;
答案 1 :(得分:1)
如果你看一下mongo shell中的stat函数:
db.coll.stat // <--no brackets here
它会告诉你里面的内容:
function ( scale ){
return this._db.runCommand( { collstats : this._shortName , scale : scale } );
}
您可以从中看到它只是运行db命令。因此,如果您使用相应的C#API RunCommand,我想在获得您想要的内容时不会有太多麻烦。
答案 2 :(得分:0)
MongoDB Shell:
在MongoDB shell中,您需要返回文档的BsonSize
:
Object.bsonsize(db.test.findOne({ _id: ObjectId("xxxxxxxxxxxxxxxxxxxxxxxx") }))
返回BSON对象的大小(以字节为单位)。
请注意,由于Record Padding,文档在数据库文件本身(磁盘上)占用的有效空间量将大于文档的大小。
这就是为什么db.test.stats()
和Object.bsonsize(...)
的输出之间存在差异。
<强> C#:强>
要获得C#应用中的大小,只需将文档投射到BSON并获取它的长度:
var oid = new BsonObjectId(new ObjectId("xxxxxxxxxxxxxxxxxxxx"));
var document = database.getCollection("myCollection").findOne(Query.EQ("_id", oid));
var sizeInBytes = document.ToBson().Length