Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 文档中的空字段是否会占用Mongoose中的空间?_Node.js_Mongodb_Express_Mongoose_Database - Fatal编程技术网

Node.js 文档中的空字段是否会占用Mongoose中的空间?

Node.js 文档中的空字段是否会占用Mongoose中的空间?,node.js,mongodb,express,mongoose,database,Node.js,Mongodb,Express,Mongoose,Database,我没有求助于继承或引用,而是考虑用所有可能的字段定义一个模式。因此,模式将有许多字段,其中一些字段在大多数情况下是空的。空字段是否仍会占用数据库中的空间?我应该定义单独的模式吗?因为您使用的是Mongoose,所以答案涉及很多细微差别。猫鼬会根据场地类型做各种事情。如果您定义的字段类型为Number或String,例如 { name: String, age: Number } 姓名和年龄都不是“必填”字段。调用后,仅使用名称创建,例如 model.create({name: 'Yu

我没有求助于继承或引用,而是考虑用所有可能的字段定义一个模式。因此,模式将有许多字段,其中一些字段在大多数情况下是空的。空字段是否仍会占用数据库中的空间?我应该定义单独的模式吗?

因为您使用的是Mongoose,所以答案涉及很多细微差别。猫鼬会根据场地类型做各种事情。如果您定义的字段类型为
Number
String
,例如

{
  name: String, 
  age: Number
}
姓名和年龄都不是“必填”字段。调用
后,仅使用名称创建
,例如

model.create({name: 'Yuri'})
然后在数据库中,您将有一个仅定义了名称的对象

{u id:ObjectId('..'),名称:'Yuri'}

换句话说,猫鼬不会储存年龄

但另一方面,如果您有一个声明为数组的字段,例如

{
  name: String,
  ages: []
}
然后,如果执行与上述相同的
create
调用,将生成以下文档:

{_id: ObjectId('...'), name: 'Yuri', ages: []}
换句话说,即使在create调用中没有指定
ages
,mongoose还是为您创建了数组。同样的机制也适用于嵌套对象


TLDR:如果您的模式是扁平的,并且只由字符串和数字组成,那么mongoose将不会在db中保存这些字段,但会为对象和数组保存这些字段。

定义“空”。“字段”的任何定义保存在数据存储中,或者实际上“任何地方”都将使用“某些空间”。没有什么是免费的。当然,除非它根本不存在。我所说的“空”是指该字段在架构中定义,但在要保存的文档中未包含或指定。您是否尝试创建文档,然后查看在这种情况下会发生什么?另外,标题“在猫鼬中占据空间”可能会误导你的意图。如果您的意思是“.在我省略数据时将数据存储在数据库中…”,那么一个简单的测试应该可以回答这个问题。然而,这也完全取决于实际的模式定义,这在问题中显然是缺失的。关于存储的“占用空间”的一般说明也是这样吗?还是客户端消耗的内存?不知道你问的是哪一个。所以你可以试着说清楚。或者“尝试”存储一些东西。您建议我如何设计这个简单的测试?数据库存储在硬盘上,但这有关系吗?为什么要查看实际的模式定义?