无法理解Mongo Db中的文档大小

时间:2015-06-25 13:43:37

标签: mongodb

我遇到了一个奇怪的mongo行为,我想稍微澄清一下。我想要实际找出单个文档在只有一个布尔属性时消耗的字节数。

使用Stackoverflow,我发现我可以使用以下命令

Object.bsonsize - 一些应以字节为单位返回大小的javascript方法

执行这些命令时,我得到了一些令人困惑的结果。

这里我提供了我合并的步骤

  1. 我创建了一个名为 mydatabase 的数据库,并存储了一个名为 datarandom 的集合,该集合有一个名为 status 的属性,我已经设置了它as false 。它被分配了对象ID = 558bf45d5ea9019aec35d7a2 。我在RoboMongo中运行了以下查询

    Object.bsonsize(db.datarandom.find( {"_id"  :ObjectId("558bf45d5ea9019aec35d7a2")})); 
    

    我得到 100字节

  2. 我在RoboMongo上跑了第二个查询,如下所示

    Object.bsonsize(db.datarandom.findOne( {"_id" :ObjectId("558bf45d5ea9019aec35d7a2")})); 
    

    我的输出只有 31个字节 !!!!!!

  3. 有人可以解释为什么当我使用Find和FindOne时我得到两个不同的输出,当我的Collection中只有一个Document时,只有boolean作为属性。

2 个答案:

答案 0 :(得分:1)

有多种方法可以找出集合大小或文档大小。

在您的方案中,您只插入了一个包含一个字段status的文档,因此一个文档中的两个字段_idstatus

使用以下命令

 use mydatabase  //To use particular database

 db.datarandom.stats() //Returns information of datarandom collection

Size提供文件大小

Count不提供任何文件等。

有关收集统计信息link

的更多详细信息

修改

注意:

find - 返回游标对象

Note: Cursor-指向查询结果集的指针。

findOne - 返回特定文档,因此在使用db.bsonsize时,它会提供文档的完美大小而不会填充空格。

collection.stats() - 返回有关集合的详细信息,size字段给出文档大小,包括填充空间。

注意: MongoDB中的每个文档都存储在一条记录中,该记录包含文档本身和额外的空格或填充。填充允许文档在更新的同时增长,同时最小化重新分配的可能性。

Check了解存储特性

Big Note

即使您只有一个或多个文档,findfindone行为也不会发生变化。

首先要了解在哪里使用。

One question for you

例如:

   [{status: true}] and {status :true} 

是一样的吗? 是否给出相同的尺寸?

答案 1 :(得分:0)

db.collection.find()查询将光标返回到所选文档,db.collection.findOne()查询返回一个文档,因此游标和一个文档的大小不同。

要使用db.collection.find()访问文档,需要使用.next()或.toArray()

迭代光标