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();
});
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);
Vous voudrez faire ceci:
User.findOne({}, function(err, user){
user.key_to_delete = undefined;
user.save();
});
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.
À 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.
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.
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
});