Mongodb-Update mit Upsert und Multi-Syntax

Ich bin neu in Mongodb und so gestresst wegen der unvollständigen Dokumentation von Mongodb, die mich für Versuch und Irrtum zurücklässt. Leider funktionieren alle meine Versuche nicht ohne Fehler, und ich bin verwirrt darüber, was passiert ist und was zu debuggen ist.

Ich muss nur mehrere Datensätze in der Datenbank aktualisieren, die bestimmten Kriterien entsprechen, und für die nicht vorhandenen Datensätze neue Einträge erstellen. Ich glaube, ich kann es mit einem einzigen Datenbankzugriff mit Update, Upsert und Multi tun. Folgendes habe ich mir ausgedacht:

dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { options: { upsert: true, multi: true } } );

Ich habe auch mehrere Kombinationen oder sogar die alte Version ausprobiert wie:

dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { upsert: true }, { multi: true } );

keiner von ihnen funktioniert ...

Bitte helfen Sie mir mit diesem so trivialen Zeug ... Ich kann es leicht in SQL tun, aber das NOSQL-Ding ist so einschränkend für mich .. Danke!

BEARBEITEN:

Die gleiche Abfrage bei find funktioniert perfekt:

dbschema.Person.find( { person_id: { $in: ["734533604" ,"701084015"] } }, function ( err, results ) {
    console.log( 'result: ' + results );
    console.log( 'error: ' + err );
    console.log( 'result length: ' + results.length );
} );

BEARBEITEN:

Ich erwarte, dass der "nicht gefundene" Datensatz erstellt und der gefundene Datensatz aktualisiert wird. Möglicherweise ist meine Logik fehlerhaft und ich bin jetzt so verwirrt.

Ursprünglich fand () ich jeweils einen Datensatz, änderte den Wert und rief save () für jeden geänderten Datensatz auf. Bei der Bereitstellung im laufenden Betrieb verlangsamte sich die Reaktionszeit jedoch um Hunderte, insbesondere wenn ein Datensatz vorhanden ist Bei jeder Anforderung müssen einige hundert Datensätze aktualisiert werden.

Dann fand ich find () + $ in, und die Leistung ist wiederhergestellt und sogar besser als zuvor (bei Abfrage), aber das Update ist immer noch inakzeptabel langsam. Daher suche ich jetzt nach Möglichkeiten, um alle Dokumente bei einer Abfrage zu aktualisieren. .

Normalerweise verwende ich in SQL UPDATE, WENN FALL DANN ... zB:

UPDATE person SET score = CASE
WHEN person_id = "734533604" THEN 1200
WHEN person_id = "701084015" THEN 1200
ELSE
score
END

Antworten auf die Frage(1)

Ihre Antwort auf die Frage