gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:00:37 25 4
gpt4 key购买 nike

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

最佳答案

由于您使用的是 Mongoose,因此答案涉及很多细微差别。 Mongoose 会根据字段类型做各种事情。如果您定义 StringNumber 类型的字段,例如

{
name: String,
age: Number
}

姓名和年龄都不是“必填”字段。一旦您仅使用名称调用 create,例如

model.create({name: 'Yuri'})

然后在您的数据库中,您将拥有一个仅定义名称的对象

{_id: ObjectId('....'), name: 'Yuri' }

换句话说, Mongoose 不会存储年龄。

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

{
name: String,
ages: []
}

然后,如果您执行与上面相同的 create 调用,将产生以下文档:

{_id: ObjectId('...'), name: 'Yuri', ages: []}

所以换句话说,即使您没有在创建调用中指定 ages,mongoose 仍然会为您创建数组。相同的机制适用于嵌套对象。

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

关于node.js - 文档中的空字段是否会占用 Mongoose 中的空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32501284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com