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

Mongodb 无法理解Mongo Db中的文档大小,mongodb,Mongodb,我遇到了mongo的一个奇怪行为,我想澄清一下。我实际上想知道当一个文档中只有一个布尔属性时,它会消耗多少字节 使用Stackoverflow,我发现我可以使用以下命令 use mydatabase //To use particular database db.datarandom.stats() //Returns information of datarandom collection Object.bsonsize—一些javascript方法,应该返回以字节为单位的大小 在执

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

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

 use mydatabase  //To use particular database

 db.datarandom.stats() //Returns information of datarandom collection
Object.bsonsize—一些javascript方法,应该返回以字节为单位的大小

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

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

  • 我创建了一个名为mydatabase的数据库,并存储了一个名为datarandom的集合,该集合有一个名为status的属性,我已将其设置为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会得到两个不同的输出

    查询将光标返回到所选文档,并返回一个文档,因此光标和文档的大小不同


    要使用db.collection.find()访问文档,您需要使用.next()或.toArray()在光标上进行迭代。

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

    在您的场景中,您只插入了一个带有一个字段的文档
    状态
    ,因此一个文档中有两个字段
    \u id
    状态

    使用以下命令

     use mydatabase  //To use particular database
    
     db.datarandom.stats() //Returns information of datarandom collection
    
    Size
    给出文档的大小

    Count
    给出文档数量等

    有关集合统计信息的更多详细信息

    编辑 注意:

    find
    -返回游标对象

    注意:
    游标-指向查询结果集的指针

    findOne
    -返回特定文档,因此在与
    db.bsonsize一起使用时,它可以提供完美的文档大小,而无需填充空间

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

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

    关于存储特性

    大钞 即使只有一个或多个文档,
    find
    findone
    行为也不会改变

    首先了解在哪里使用什么

    给你一个问题

    例如:

       [{status: true}] and {status :true} 
    
    是一样的吗?
    它是否提供相同的大小?

    您好,我在集合中只有一个文档,因此find和findone应该提供相同的大小。你能解释一下为什么即使find给出了一个光标,“应该给出相同的大小”-应该?我想不是。在一种情况下,您可以得到单个文档的大小。在另一种情况下,您将获得光标的大小。你在比较无与伦比的东西。嗨,Karthik,当我运行这个命令时,我得到的大小是48字节。哪个是正确的stats()或object.bsonsize?@shubhamagiwal+1要指出,请检查编辑,根据您的要求选择适当的方法。我在集合中只有一个文档,因此有效地查找和查找应该给我相同的大小。你能解释一下为什么即使find给出了一个光标,也会有区别吗?kudos@karthigh.k。这就是我所期望的.Object.bsonsize(db.datarandom.find({“\u id”:ObjectId(“558bf45d5ea9019aec35d7a2”))))…-给出光标的大小Object.bsonsize(db.datarandom.findOne({“\u id”:ObjectId(“558bf45d5ea9019aec35d7a2”)}))-给出文档的大小