Mungo findOneAndUpdate Upsert _id null?
Ich würde gerne eine einzelne Methode, die Sie entweder erstellt oder aktualisiert ein Dokument für eine Politik. Suchen und versuchen, verschiedene Techniken wie diese eine, ich habe mit einer null _id für mein Dokument. Mit findByIdAndUpdate hat eine ähnliche Wirkung.
Sehe ich ein Dokument eingefügt, in der Sammlung, aber das _id Feld null ist:
exports.savePolicy = function (plcy, callback) {
console.log('priority is : ' + plcy.priority)
try {
var policy = new Policy(plcy);
var query = {_id: plcy._id}; //this may be null
var update = {
name: plcy.name || defaults.policyDefaults.name,
longDescription: plcy.longDescription || defaults.policyDefaults.longDescription,
shortDescription: plcy.shortDescription || defaults.policyDefaults.shortDescription,
priority: plcy.priority, colorHex: plcy.colorHex || defaults.policyDefaults.colorHex,
settings: plcy.settings || [],
parentPolicyId: plcy.parentPolicyId || null
}
Policy.findOneAndUpdate(query, update, {upsert: true}, function (err, data) {
callback(err, data);
});
} catch (e) {
log.error('Exception while trying to save policy: ' + e.message);
callback(e, null);
}
Gibt es etwas, das getan werden kann, um die _id nicht null sein, wenn es sich nicht um ein update?
- haben Sie jemals herausfinden? Ich war immer das gleiche problem. Ich endete die überprüfung für die _id manuell und rufen dann entweder findOneAndUpdate für einen update-oder create() für einen neuen Datensatz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
null
ist eine gültige_id
Wert in MongoDB, so dass, wenn Sie nicht wollen, dass es in neuen docs, müssen Sie sicherstellen, dass einnull
Wert ersetzt wird mit einem neuenObjectID
imquery
:Ich hatte das gleiche problem und konnte nicht herausfinden, einen Weg, um es zu arbeiten. Landete ich Schreibe meine eigenen upsert-Methode wie so....
Mir erlaubt zu nennen, es für alle meine Modelle mit einer Zeile code...
Gibt es vielleicht einen besseren Weg, es zu tun, aber das ist für mich arbeiten. Ich kann tun, Aktualisierungen und Einfügungen, und ich bekomme nicht eine null _id auf einfügen.
Ich bin nicht mit Mungo, aber ich Laufe in ähnliches Problem mit MongoDB. Für Upsert Aktion als neues Objekt eingefügt wurde der MongoDB Einstellung war
null
zu_id
.Ich rief:
wo
obj._id
warundefined
.Das problem war, dass
_id
anwesend war, auf der Liste der Schlüssel, dieObject.keys(obj)
. Ich fand, dass ich die Zuordnungobj._id = some_variable
, wosome_variable
warundefined
, und, was_id
erscheinen auf einer Liste von Schlüsseln.Habe ich mich beworben, Abhilfe durch Aufruf direkt vor upsert:
Dank JohnnyHK für eine hilfreiche Antwort oben. Ich kam mit einem one-liner, da es so Häufig verwendet:
Es beruht auf den folgenden benötigen:
Versuchen Sie 'new' - parameter auf true:
Mehr info: https://github.com/Automattic/mongoose/issues/2939
Versuchen Sie, die upsert-parameter auf true, in Ihrem Aufruf zu aktualisieren. Aus der mongoid docs: http://docs.mongodb.org/manual/reference/method/db.collection.update/#update-parameter