Hallo,
Wie kann ich eine ObjectId aus einem Array von ObjectId entfernen?
Mein Modell :
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 }
});
Die Funktion zum Löschen der 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));
});
});
Vielen Dank für Ihre Antwort.
Verwenden Sie keinen Spleiß.
me.friends.remove(uid);
me.save(callback);
Diese Funktion ist schön!
Gibt es eine Möglichkeit, dies für mehrere Dokumente wie folgt zu tun?
User.update({
friends: uid
}, {
'$pull': {
friends: uid
}
})
Auf der Suche nach einer Antwort auf dieselbe Frage (oben). Wie geht das bei mehreren Dokumenten?
@jhickner versuche $pullAll
. http://docs.mongodb.org/manual/reference/operator/update/pullAll/
wunderbar
@bnoguchi Hallo, ich weiß, dass dies ein alter Thread ist, aber es ist der erste Beitrag bei Google (und ich habe hier eine Lösung gefunden).
Aber der Vollständigkeit halber nur eine kurze Frage. Welche Verwendung wird bevorzugt:
me.friend.remove(uid);
me.save(callback);
Oder:
me.friends.pull(uid);
me.save(callback);
Gibt es auch eine korrektere Möglichkeit, neue "Freunde" anstelle von (kurz: bessere Alternative für push() )
me.friend.push(uid);
me.save(callback);
Danke.
Re: erste Frage, egal, nach persönlicher Vorliebe
Re: 2. Frage, wie besser?
As-in effizienter/schneller.
Außerdem ist mir aufgefallen, dass .pop(...) Probleme beim Leeren eines Arrays haben kann und das Feld "cannot save undefined" nach dem Aufrufen der me.save(callback)-Funktion auslöst, während remove() ok funktioniert - daher frage ich.
Nein, push()
sollte so schnell wie möglich sein, während Sie weiterhin save()
. Sie können auch me.update({}, { $push: { friend: uid } }).then()
tun, was geringfügig schneller ist, indem Middleware, Validierung usw. umgangen wird, aber die Gesamtlatenz wird dadurch nicht zu sehr verbessert.
Re: die pop()
Probleme, können Sie bitte ein separates Problem mit einem Stacktrace und einem Skript öffnen, das dieses Problem reproduziert?
Hilfreichster Kommentar
Verwenden Sie keinen Spleiß.