Wenn Sie MongoDBs Standard-ObjectIDs für Ihr _id
-Feld verwenden, enthalten diese einen Zeitstempel Komponente, mit der Sie das Erstellungsdatum für ein Dokument ableiten können. Der PHP-Treiber enthält eine Methode MongoId :: getTimestamp () , die zum Extrahieren der Uhrzeit verwendet werden kann von einer ObjectID.
Beachten Sie, dass die ObjectID normalerweise vom PHP-Treiber (nicht vom MongoDB-Server) generiert wird. Daher ist es wichtig, dass Ihre Uhren mit ntpd
oder ähnlich synchronisiert sind, wenn die Zeitstempelgenauigkeit wichtig ist.
In der kommenden Version von MongoDB 2.6 wurde ein neuer $currentDate
update-Modifikator hinzugefügt, der das Einstellen von serverseitigen Daten und Zeitstempeln unterstützt. Weitere Informationen finden Sie im SERVER-10911 im MongoDB Jira-Issue-Tracker.
Solange diese serverseitige Unterstützung nicht verfügbar ist, besteht Ihre beste Methode zum Hinzufügen von aktuellem Datum und Uhrzeit darin, Ihren Anwendungscode mit time()
oder einer entsprechenden Funktion festzulegen.
Bei einem Einfügen, wenn Sie einen BsonTimeStamp (0,0) in eines der ersten beiden Felder einfügen, wird der Server durch den aktuellen Zeitstempel auf dem Server ersetzt.
%Vor%Bei Dokumenten mit _id 2 und 3 wird der aktuelle Zeitstempel in das Feld ts eingefügt.
%Vor%Auch mit dem Server 2.5.3 (wird als 2.6 veröffentlicht) haben Sie ein neues Update für $ currentDate ( Ссылка <) / a>), mit der ein Feld auf ein Datum oder einen Zeitstempel gesetzt werden kann
Ich habe lange darüber nachgedacht und herausgefunden, dass das funktioniert:
%Vor% Die Idee hinter dem seltsamen Abfrageteil ist, dass es immer "nicht gefunden" zurückgibt, so dass es immer das Dokument ( upsert: true
) erstellt, aber auch nicht als Wert für das neu eingefügte Dokument verwendet (zum Beispiel Bei Verwendung von { _id: 0 }
in der Abfrage würde tatsächlich ein Dokument mit einem _id-Feld mit dem Wert 0 eingefügt.
Ein ähnlicher Ansatz kann mit Bulks verwendet werden:
%Vor%Tags und Links mongodb