Bonjour,
Comment supprimer un ObjectId d'un tableau d'ObjectId ?
Mon modele :
var User = new Schema({
title : { type : String, index: true },
name : String,
friends : [ObjectId],
join_at : {type:Date, default:Date.now },
save_at : {type:Date, default:Date.now }
});
La fonction de suppression de l'objectId : uid
User.findOne({'_id' : self.id}, function(err, me){
for(var i=0; i<=me.friends.length; i++){
if (String(me.friends[i])==String(uid)){
me.friends.splice(i, 1);
break;
}
}
me.save(function(err,us){
next(err,'kljlmjk'+JSON.stringify(me));
});
});
Merci pour votre réponse.
N'utilisez pas d'épissure.
me.friends.remove(uid);
me.save(callback);
Cette fonction est magnifique !
Existe-t-il un moyen de le faire sur plusieurs documents comme suit ?
User.update({
friends: uid
}, {
'$pull': {
friends: uid
}
})
Vous cherchez une réponse à cette même question (ci-dessus). Comment faire pour plusieurs documents ?
@jhickner essaie $pullAll
. http://docs.mongodb.org/manual/reference/operator/update/pullAll/
formidable
@bnoguchi Salut, je sais que c'est un vieux fil, mais c'est le premier post sur google (et j'ai trouvé une solution ici).
Juste une petite question, cependant, par souci d'exhaustivité. Quelle utilisation est préférée :
me.friend.remove(uid);
me.save(callback);
Ou:
me.friends.pull(uid);
me.save(callback);
De plus, existe-t-il un moyen plus correct d'insérer de nouveaux "amis" au lieu de (en bref, une meilleure alternative pour push() ):
me.friend.push(uid);
me.save(callback);
Merci.
Re: première question, peu importe, selon vos préférences personnelles
Re : 2ème question, mieux dans quel sens ?
Au fur et à mesure plus efficace/plus rapide.
De plus, j'ai remarqué que .pop(...) peut avoir des problèmes lors du vidage d'un tableau, en lançant le champ "ne peut pas enregistrer undefined" après avoir appelé la fonction me.save(callback), tandis que remove() fonctionne correctement - d'où ma demande.
Non, push()
devrait être aussi rapide que possible tout en utilisant save()
. Vous pouvez également faire me.update({}, { $push: { friend: uid } }).then()
, ce qui sera légèrement plus rapide en contournant le middleware, la validation, etc. mais cela n'améliorera pas trop la latence globale.
Re : les problèmes de pop()
, pouvez-vous ouvrir un problème séparé avec une trace de pile et un script qui reproduit ce problème s'il vous plaît ?
Commentaire le plus utile
N'utilisez pas d'épissure.