tutorial español node.js mongodb mongoose

node.js - español - mongoose schema



¿Por qué Mongoose agrega matrices en blanco? (4)

Estoy tratando de comenzar a utilizar Mongoose como ODM para MongoDB con mi aplicación node.js. Noté que cuando diseño un esquema con un documento incrustado, si no le agrego un valor, almacena una matriz en blanco "[]" en Mongo. ¿Por qué es esto? Estoy tratando de almacenar cambios históricos en los registros y una matriz en blanco significaría que ese cambio eliminó el valor. Aquí hay un esquema de muestra.

schema.Client = new mongoose.Schema({ name:{type:String, required:true}, products:[{ name:{type:String, index:true}, startDate:Date, endDate:Date }], subdomain:{type:String, index:{unique:true}}, })

Aquí está el documento resultante cuando guardo un documento con solo nombre y subdominio.

{ "name": "Smith Company", "products": [], "subdomain": "smith" }

¿Por qué agregó productos con una matriz en blanco por defecto y cómo puedo detenerlo?


Esto parece ser por diseño, pero hay una solución aquí utilizando un controlador ''pre'' para eliminar la matriz vacía predeterminada: https://github.com/LearnBoost/mongoose/issues/1335

Sin embargo, esto solo me funcionó cuando configuré el campo en null . Si lo configuro como no undefined como en el código de muestra, la matriz vacía parece volver.


Porque en tu esquema estás definiendo productos para ser una matriz de objetos. Tendrías que probar algo como:

products: { name:{type:String, index:true}, startDate:Date, endDate:Date },

Esto almacenará un objeto vacío en lugar de una matriz.


Puedes solucionar el problema definiendo el esquema a continuación:

products: { type: [{ name:String, startDate:Date, endDate:Date }], default: undefined }


La matriz en blanco le brinda una manera conveniente de agregar o eliminar elementos de su modelo.

$push actualización de $push $addToSet $pull le ayudaría a administrar los elementos de su matriz.

Si no tiene una matriz en blanco, entonces no puede empujar elementos a null

Pero es posible en una matriz en blanco .