Eliminar una clave de un documento MongoDB utilizando Mongoose

Estoy usando la Biblioteca Mongoose para acceder a MongoDB con node.js

¿Hay alguna manera de eliminar una clave de un documento ? es decir, no solo establece el valor en nulo, sino que lo elimina?

User.findOne({}, function(err, user){ //correctly sets the key to null... but it's still present in the document user.key_to_delete = null; // doesn't seem to have any effect delete user.key_to_delete; user.save(); }); 

En las primeras versiones, habría necesitado desplegar el controlador node-mongodb-native. Cada modelo tiene un objeto de colección que contiene todos los métodos que ofrece node-mongodb-native. Entonces puedes hacer la acción en cuestión con esto:

 User.collection.update({_id: user._id}, {$unset: {field: 1 }}); 

Desde la versión 2.0 puedes hacer:

 User.update({_id: user._id}, {$unset: {field: 1 }}, callback); 

Y desde la versión 2.4, si ya tiene una instancia de un modelo, puede hacerlo:

 doc.field = undefined; doc.save(callback); 

Querrás hacer esto:

 User.findOne({}, function(err, user){ user.key_to_delete = undefined; user.save(); }); 

Uso mongoose y el uso de cualquiera de las funciones anteriores me hizo el requerimiento. La función comstack sin errores pero el campo aún permanecerá.

 user.set('key_to_delete', undefined, {strict: false} ); 

hizo el truco para mí

En la syntax de mongo para eliminar alguna clave, debes hacer lo siguiente:

 { $unset : { field : 1} } 

Parece en Mongoose lo mismo.

Editar

Verifique este ejemplo.

¿Podría ser un problema secundario como usar

 function (user) 

en lugar de

 function(err, user) 

para la callback del hallazgo? Solo trato de ayudar con esto porque ya tenía el caso.

puede usar delete user._doc.key

El documento de Mangosta NO es un objeto simple de javascript y es por eso que no se puede usar el operador de eliminación. (O unset de la biblioteca ‘lodash’).

Sus opciones son establecer doc.path = null || undefined o para usar el método Document.toObject () para convertir mongoose doc en objeto simple y desde allí usarlo como de costumbre. Lea más en la api-ref de mongoose: http://mongoosejs.com/docs/api.html#document_Document-toObject

El ejemplo se vería así:

 User.findById(id, function(err, user) { if (err) return next(err); let userObject = user.toObject(); // userObject is plain object }); 
Intereting Posts