我遇到了一个奇怪的mongo行为,我想稍微澄清一下。我想要实际找出单个文档在只有一个布尔属性时消耗的字节数。
使用Stackoverflow,我发现我可以使用以下命令
Object.bsonsize - 一些应以字节为单位返回大小的javascript方法
执行这些命令时,我得到了一些令人困惑的结果。
这里我提供了我合并的步骤
我创建了一个名为 mydatabase 的数据库,并存储了一个名为 datarandom 的集合,该集合有一个名为 status 的属性,我已经设置了它as false 。它被分配了对象ID = 558bf45d5ea9019aec35d7a2 。我在RoboMongo中运行了以下查询
Object.bsonsize(db.datarandom.find( {"_id" :ObjectId("558bf45d5ea9019aec35d7a2")}));
我得到 100字节。
我在RoboMongo上跑了第二个查询,如下所示
Object.bsonsize(db.datarandom.findOne( {"_id" :ObjectId("558bf45d5ea9019aec35d7a2")}));
我的输出只有 31个字节 !!!!!!
有人可以解释为什么当我使用Find和FindOne时我得到两个不同的输出,当我的Collection中只有一个Document时,只有boolean作为属性。
答案 0 :(得分:1)
有多种方法可以找出集合大小或文档大小。
在您的方案中,您只插入了一个包含一个字段status
的文档,因此一个文档中的两个字段_id
和status
使用以下命令
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了解存储特性
即使您只有一个或多个文档,find
和findone
行为也不会发生变化。
首先要了解在哪里使用。
One question for you
例如:
[{status: true}] and {status :true}
是一样的吗? 是否给出相同的尺寸?
答案 1 :(得分:0)
db.collection.find()查询将光标返回到所选文档,db.collection.findOne()查询返回一个文档,因此游标和一个文档的大小不同。
要使用db.collection.find()访问文档,需要使用.next()或.toArray()
迭代光标