Mongoose: Aus Array entfernen[ObjectId]

Erstellt am 24. Mai 2011  ·  10Kommentare  ·  Quelle: Automattic/mongoose

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.

Hilfreichster Kommentar

Verwenden Sie keinen Spleiß.

me.friends.remove(uid);
me.save(callback);

Alle 10 Kommentare

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?

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?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Igorpollo picture Igorpollo  ·  3Kommentare

ghost picture ghost  ·  3Kommentare

weisjohn picture weisjohn  ·  3Kommentare

simonxca picture simonxca  ·  3Kommentare

adamreisnz picture adamreisnz  ·  3Kommentare