Ich habe eine Sammlung foo
hypothetisch benannt.
Jede Instanz von foo
hat ein Feld namens lastLookedAt, das seit der Epoche ein UNIX-Zeitstempel ist. Ich möchte in der Lage sein, den MongoDB-Client zu durchsuchen und diesen Zeitstempel für alle vorhandenen Dokumente (etwa 20.000 davon) auf den aktuellen Zeitstempel zu setzen.
Wie gehe ich am besten damit um?
Antworten:
Unabhängig von der Version
<update>
lautet das Beispiel für Ihr Beispiel :Abhängig von Ihrer Version von MongoDB sieht die Abfrage jedoch anders aus. Unabhängig von der Version ist der Schlüssel, dass die leere Bedingung
{}
mit jedem Dokument übereinstimmt . In der Mongo-Shell oder mit einem beliebigen MongoDB-Client:$ version> = 3.2 :
{}
ist die Bedingung (die leere Bedingung entspricht jedem Dokument)3.2> $ version> = 2.2 :
{}
ist die Bedingung (die leere Bedingung entspricht jedem Dokument){multi: true}
ist die Option "Mehrere Dokumente aktualisieren"$ version <2.2 :
{}
ist die Bedingung (die leere Bedingung entspricht jedem Dokument)false
steht für den Parameter " upsert "true
ist für den Parameter "multi" (mehrere Datensätze aktualisieren)quelle
Dieser Code ist hilfreich für Sie
quelle
Ich benutze den MongoDB .NET-Treiber seit etwas mehr als einem Monat. Wenn ich dies mit dem .NET-Treiber tun würde, würde ich die Update-Methode für das Auflistungsobjekt verwenden. Zuerst erstelle ich eine Abfrage, die mir alle Dokumente liefert, an denen ich interessiert bin, und aktualisiere die Felder, die ich ändern möchte. Das Aktualisieren in Mongo wirkt sich nur auf das erste Dokument aus. Um alle Dokumente zu aktualisieren, die sich aus der Abfrage ergeben, muss das Aktualisierungsflag "Multi" verwendet werden. Beispielcode folgt ...
quelle