【问题标题】:Unable to Understand the Document Size in Mongo Db [duplicate]无法理解 Mongo Db 中的文档大小 [重复]
【发布时间】:2015-09-12 03:59:18
【问题描述】:

我遇到了 mongo 的一个奇怪行为,我想澄清一下。我实际上想知道一个文档只有一个布尔属性时消耗了多少字节。

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

Object.bsonsize - 一些应该返回字节大小的 JavaScript 方法

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

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

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

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

    我得到了 100 个字节

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

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

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

有人可以解释为什么我在使用 Find 和 FindOne 时得到两个不同的输出,而我的 Collection 中只有一个 Document 并且只有布尔值作为属性。

【问题讨论】:

  • Object.bsonsize(db.datarandom.find( {"_id" :ObjectId("558bf45d5ea9019aec35d7a2")})).. - 给出光标的大小。 | Object.bsonsize(db.datarandom.findOne( {"_id" :ObjectId("558bf45d5ea9019aec35d7a2")}))... - 给出文档的大小

标签: mongodb


【解决方案1】:

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

要使用 db.collection.find() 访问文档,您需要使用 .next() 或 .toArray() 遍历光标

【讨论】:

  • 嗨,我在集合中只有一个文档,因此有效地 find 和 findone 应该给我相同的大小。你能解释一下为什么即使 find 给出了一个 Cursor 也会有区别吗?
  • “应该提供相同的尺寸” - 应该吗?我想不是。在一种情况下,您会获得单个文档的大小。另一方面,您将获得 光标 的大小。你在比较无与伦比的东西。
【解决方案2】:

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

在您的场景中,您只插入了一个带有一个字段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 用于存储特性

大笔记

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

首先了解在哪里使用什么。

One question for you

例如:

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

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

【讨论】:

  • 嗨 Karthik,当我运行该命令时,我得到的大小为 48 字节。哪个是正确的 stats() 或 object.bsonsize?
  • @shubhamagiwal +1 指出,请检查编辑,根据您的要求选择适当的方法
  • 嗨,我在集合中只有一个文档,因此有效地 find 和 findone 应该给我相同的大小。你能解释一下为什么即使 find 给出了一个 Cursor 也会有区别吗?
  • 赞 @karthick.k 。这是我所期望的。
猜你喜欢
  • 1970-01-01
  • 2023-01-24
  • 2023-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多