una - insertar varios documentos en mongodb
Eliminar una clave de un documento MongoDB utilizando Mongoose (7)
¿Podría ser un problema secundario como usar
function (user)
en lugar de
function(err, user)
para la devolución de llamada del hallazgo? Solo trato de ayudar con esto porque ya tenía el caso.
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();
});
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
});
En la sintaxis de mongo para eliminar alguna clave, debes hacer lo siguiente:
{ $unset : { field : 1} }
Parece en Mongoose lo mismo.
Editar
Verifique this ejemplo.
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 mangosta y el uso de cualquiera de las funciones anteriores me hizo el requerimiento. La función compila sin errores pero el campo aún permanecerá.
user.set(''key_to_delete'', undefined, {strict: false} );
hizo el truco para mí
puede usar delete user._doc.key