¿Los campos vacíos de un documento ocupan espacio en Mongoose?

En lugar de recurrir a la herencia o referencias, estoy pensando en definir un esquema con todos los campos posibles. Como resultado, el esquema tendrá muchos campos, algunos de los cuales estarán vacíos la mayoría de las veces. ¿Los campos vacíos todavía ocuparán espacio en la base de datos? ¿Debo definir esquemas separados en su lugar?

Ya que estás usando Mangosta, la respuesta tiene muchos matices. La mongoose hará varias cosas dependiendo del tipo de campo. Si define un campo de tipo Number de String por ejemplo

 { name: String, age: Number } 

Donde ni nombre ni edad es un campo “requerido”. Una vez que llame a create con sólo el nombre, por ejemplo

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

Luego, en su base de datos, tendrá un objeto con solo el nombre definido

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

En otras palabras, la mongoose no almacenará la edad.

Pero, por otro lado, si tiene un campo que se declara como una matriz, por ejemplo,

 { name: String, ages: [] } 

Luego, si realiza la misma llamada de create anterior, se obtendrá el siguiente documento:

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

Entonces, en otras palabras, aunque no especificó las ages en su llamada de creación, mongoose creó la matriz para usted de todos modos. La misma mecánica se aplica a los objetos nesteds.

TLDR: si su esquema es plano y está compuesto solo de cadenas y números, entonces la mongoose no guardará esos campos en la base de datos, pero lo hará para objetos y matrices.