Supprimer une clé d'un document MongoDB à L'aide de Mongoose

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

Est-il un moyen de supprimer une clé à partir d'un document? c'est-à-dire pas seulement définir la valeur à null, mais l'enlever?

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();
});
58
demandé sur Daniel Beardsley 2010-12-20 07:42:05

7 réponses

Dans les premières versions, vous auriez dû déposer le pilote node-mongodb-native. Chaque modèle a un objet de collection qui contient toutes les méthodes proposées par node-mongodb-native. Ainsi, 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 faire:

doc.field = undefined;
doc.save(callback);
108
répondu staackuser2 2012-08-22 01:51:08

Vous voudrez faire ceci:

User.findOne({}, function(err, user){
  user.key_to_delete = undefined;
  user.save();
});
36
répondu deedubs 2011-05-09 02:52:41

J'utilise 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 toujours.

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

A Fait le tour pour moi.

19
répondu Noushad PP 2016-09-28 11:30:14

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

{ $unset : { field : 1} }

Semble à Mangouste la même chose.

Modifier

Cochez cet exemple.

5
répondu Andrew Orsich 2011-01-04 23:37:23

Cela pourrait - il être un problème secondaire comme l'utilisation de

function (user)

Au Lieu de

function(err, user)

Pour le rappel de la découverte ? Juste essayer d'aider avec cela comme j'ai déjà eu le cas.

1
répondu Luc 2011-04-12 20:46:02

Le document Mongoose n'est pas un objet JavaScript simple et c'est pourquoi vous ne pouvez pas utiliser l'opérateur delete.(Ou unset de la bibliothèque' lodash').

Vos options sont de définir doc.chemin = null || undefined ou à l'utilisation.méthode toObject() pour transformer Mangouste doc En objet simple et à partir de là, utilisez-le comme d'habitude. En savoir plus dans mongoose api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject

Exemple ressemblerait à ceci:

User.findById(id, function(err, user) {
    if (err) return next(err);
    let userObject = user.toObject();
    // userObject is plain object
});
0
répondu petarr 2018-06-21 19:52:25

Vous pouvez utiliser supprimer l'utilisateur._doc.clé

-1
répondu Joel Esperanza 2016-10-18 11:55:21