Elimina una chiave da un documento MongoDB usando Mongoose

Sto usando la Libreria Mongoose per accedere a MongoDB con node.js

C’è un modo per rimuovere una chiave da un documento ? cioè non basta impostare il valore su null, ma rimuoverlo?

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(); }); 

Nelle prime versioni, avresti avuto bisogno di rilasciare il driver node-mongodb-native. Ogni modello ha un object collezione che contiene tutti i metodi offerti da node-mongodb-native. Quindi puoi fare l’azione in questione con questo:

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

Dalla versione 2.0 puoi fare:

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

E dalla versione 2.4, se hai già un’istanza di un modello, puoi fare:

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

Avrai voglia di fare questo:

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

Io uso mangusta e l’utilizzo di una delle funzioni di cui sopra mi ha reso necessario. La funzione compila senza errori ma il campo rimarrebbe comunque.

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

ha fatto il trucco per me.

Alla syntax di mongo per cancellare alcune chiavi che devi seguire:

 { $unset : { field : 1} } 

Sembra a Mongoose lo stesso.

modificare

Controlla questo esempio.

Potrebbe essere un problema laterale come l’utilizzo

 function (user) 

invece di

 function(err, user) 

per il richiamo del ritrovamento? Sto solo cercando di aiutare con questo come ho già avuto il caso.

puoi usare delete user._doc.key

Il documento Mongoose NON è un semplice object javascript ed è per questo che non è ansible utilizzare l’operatore delete. (O unset dalla libreria ‘lodash’).

Le tue opzioni sono per impostare doc.path = null || non definito o utilizzare il metodo Document.toObject () per trasformare il documento di mangusta in object semplice e da lì usarlo come al solito. Per saperne di più su mongoose api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject

Esempio sarebbe simile a questo:

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