Mongoose: findOneAndUpdate mit {upsert: true} gibt kein Dokument zurück

Erstellt am 29. Apr. 2015  ·  4Kommentare  ·  Quelle: Automattic/mongoose

Kürzlich auf Mungo 4.0.2 aktualisiert. Der folgende Code funktionierte zuvor, führt aber jetzt dazu, dass das Dokument erstellt, aber nicht an den Rückruf übergeben wird:

Milestone.findOneAndUpdate({
    ......
}, {
    ......
}, {upsert: true}, function(err, res) {
    // err === null
    // res === null
    done(err, res);
});

Dies geschieht nur beim Upsert . Ich kann überprüfen, ob das Dokument erstellt wurde, aber sowohl err als auch res sind durchweg null. Wenn ich die Funktion erneut aufrufe (da das Dokument jetzt existiert), funktioniert sie wie erwartet.

Mungo: 4.0.2
Knoten: v0.12.2
Mongodb: 2.6.9

help

Hilfreichster Kommentar

Verwenden Sie die Option new: true , siehe Versionshinweise 4.0 zu #2262.

Milestone.findOneAndUpdate({
    ......
}, {
    ......
}, {upsert: true, 'new': true}, function(err, res) {
    // err === null
    // res === null
    done(err, res);
});

Alle 4 Kommentare

Verwenden Sie die Option new: true , siehe Versionshinweise 4.0 zu #2262.

Milestone.findOneAndUpdate({
    ......
}, {
    ......
}, {upsert: true, 'new': true}, function(err, res) {
    // err === null
    // res === null
    done(err, res);
});

Vielen Dank! Warum wird das Dokument trotzdem erstellt, wenn ich new: true weglasse?

new ist standardmäßig false, und wenn new false ist, gibt MongoDB das Dokument so zurück, wie es vor der Aktualisierungsoperation war. Bei Upserts gab es kein Dokument, also null.

Ah ich verstehe, danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen