Estoy usando la biblioteca Mongoose para acceder a MongoDB con node.js
¿Existe alguna forma de eliminar una clave de un documento ? es decir, no solo establecer el valor en nulo, sino eliminarlo.
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();
});
mongodb
node.js
mongoose
document-database
Daniel Beardsley
fuente
fuente
Respuestas:
En las primeras versiones, habría tenido que 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 puede hacer la acción en cuestión de esta manera:
Desde la versión 2.0 puedes hacer:
Y desde la versión 2.4, si ya tienes una instancia de un modelo puedes hacer:
fuente
User.update({ _id: id }, { $unset: { field: 1 }}, callback)
o si tiene una instancia de documento, establecer la ruta a indefinido y guardarla:doc.field = undefined; doc.save()
doc.set('field', undefined)
doc.field.foo
?doc.set('field', undefined)
puede no ser suficiente ya que el modo estricto (predeterminado) no permite establecer campos que ya no están en el esquema.doc.set('field', undefined, { strict: false })
funcionó bien.Querrás hacer esto:
fuente
Yo uso mangosta y el uso de cualquiera de las funciones anteriores me hizo el requisito. La función compila sin errores, pero el campo aún permanecería.
hizo el truco para mí.
fuente
En la sintaxis de mongo para eliminar alguna clave, debe hacer lo siguiente:
En Mongoose parece lo mismo.
Editar
Mira este ejemplo.
fuente
¿Podría ser esto un problema secundario como usar
en vez de
para la devolución de llamada del hallazgo? Solo trato de ayudar con esto, ya que ya tenía el caso.
fuente
El documento Mongoose NO es un objeto simple de JavaScript y es por eso que no puede usar el operador de eliminación (o
unset
de la biblioteca 'lodash').Sus opciones son establecer doc.path = null || undefined o usar el método Document.toObject () para convertir el documento de mangosta en un objeto simple y desde allí usarlo como de costumbre. Leer más en mongoose api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject
El ejemplo se vería así:
fuente
Tratar:
fuente
el problema con todas estas respuestas es que funcionan para un campo. por ejemplo, digamos que quiero eliminar todos los campos de mi documento si fueran una cadena vacía
""
. Primero debe verificar si el campo es una cadena vacía y ponerlo en$unset
:fuente
si desea eliminar una clave de la colección, pruebe este método. esto funcionó para mí
fuente
puede usar delete user._doc.key
fuente