如何使用c#驱动程序获取单个mongodb文档的大小?

时间:2014-05-16 06:40:22

标签: c# mongodb size document

我尝试使用c#构建一个应用程序,首先将文档保存到mongodb,然后检查文档的大小。我已经找到了使用mongodb shell检查大小的方法,但我似乎无法找到与c#驱动程序相同的功能。我以为我可以通过创建一个包含BsonObject.size()的命令文件来实现它,但是我无法让它工作。

3 个答案:

答案 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