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 ? c'est à dire non seulement définir la valeur à null, mais le 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();
});
mongodb
node.js
mongoose
document-database
Daniel Beardsley
la source
la source
Réponses:
Dans les premières versions, vous auriez dû supprimer le pilote natif de node-mongodb. Chaque modèle a un objet de collection qui contient toutes les méthodes proposées par node-mongodb-native. Vous pouvez donc faire l'action en question par ceci:
Depuis la version 2.0, vous pouvez faire:
Et depuis la version 2.4, si vous avez déjà une instance d'un modèle, vous pouvez faire:
la source
User.update({ _id: id }, { $unset: { field: 1 }}, callback)
ou si vous avez une instance de document, définissez le chemin sur undefined, puis enregistrez-le:doc.field = undefined; doc.save()
doc.set('field', undefined)
doc.field.foo
?doc.set('field', undefined)
peut ne pas suffire car le mode strict (par défaut) ne permet plus de définir des champs qui ne sont plus dans le schéma.doc.set('field', undefined, { strict: false })
a bien fonctionné.Vous voudrez faire ceci:
la source
J'utilise la mangouste et l'utilisation de l'une des fonctions ci-dessus m'a obligé. La fonction compile sans erreur mais le champ resterait toujours.
a fait l'affaire pour moi.
la source
À mongo syntax pour supprimer une clé, vous devez suivre:
Semble à Mongoose la même chose.
Éditer
Vérifiez cet exemple.
la source
Cela pourrait-il être un problème secondaire comme l'utilisation
au lieu de
pour le rappel de la trouvaille? J'essaie juste d'aider avec ça car j'avais déjà le cas.
la source
Le document Mongoose n'est PAS un objet javascript simple et c'est pourquoi vous ne pouvez pas utiliser l'opérateur de suppression. (Ou
unset
de la bibliothèque 'lodash').Vos options sont de définir doc.path = null || undefined ou utiliser la méthode Document.toObject () pour transformer mangouste doc en objet simple et à partir de là, utilisez-la comme d'habitude. En savoir plus sur mongoose api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject
L'exemple ressemblerait à ceci:
la source
Essayer:
la source
le problème avec toutes ces réponses est qu'elles fonctionnent pour un domaine. par exemple, disons que je veux supprimer tous les champs de mon document s'ils étaient une chaîne vide
""
. Tout d'abord, vous devez vérifier si le champ est une chaîne vide, mettez-le dans$unset
:la source
si vous souhaitez supprimer une clé de la collection, essayez cette méthode. cela a fonctionné pour moi
la source
vous pouvez utiliser delete user._doc.key
la source