146 votes

Supprimer une clé d'un document MongoDB en utilisant Mongoose

J'utilise la bibliothèque Mongoose pour accéder à MongoDB avec node.js

Existe-t-il un moyen de supprimer une clé d'un document ? Par exemple, il ne suffit pas de définir la valeur sur NULL, mais de la supprimer ?

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

215voto

emostar Points 4662

Dans les premières versions, vous auriez dû déposer le pilote node-mongodb-native. Chaque modèle a un objet collection qui contient toutes les méthodes que node-mongodb-native offre. Donc vous pouvez faire l'action en question par ceci :

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

Depuis la version 2.0 vous pouvez faire :

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

Et depuis la version 2.4, si vous avez déjà une instance d'un modèle, vous pouvez le faire :

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

67voto

deedubs Points 141

Vous voudrez le faire :

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

43voto

Noushad Points 1422

J'utilise la mangouste et l'utilisation de l'une des fonctions ci-dessus m'a fait l'exigence. La fonction compile sans erreur mais le champ resterait.

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

a fait le tour pour moi.

10voto

Andrew Orsich Points 24503

À la syntaxe mongo pour supprimer une touche, vous devez faire ce qui suit :

{ $unset : { field : 1} }

On dirait que Mongoose est pareil.

Modifier

Cochez cet exemple.

1voto

Luc Points 4194

Serait-ce un problème secondaire comme l'utilisation de

function (user)

au lieu de

function(err, user)

pour le rappel de la trouvaille ? J'essayais juste d'aider avec ça comme j'avais déjà l'affaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X