2014-06-30 12 views
10

Wir versuchen, ein Dokument mit dem aktuellen Datum als Feld einzufügen. Wir schreiben in Java mit Eclipse-Plugin für Mongodb. Wir wollen den Befehl Date() von Mongo ausführen, um das Datum von Mongo und nicht von Java zu erhalten.Wie füge ich ein Dokument mit Datum in Mongo ein?

Wie kann ich diese Mongo-Abfrage ausführen?

db.example.insert({"date":new Date()}) 

fand ich diese Frage in einer Vorschau Frage, aber die Antwort war nicht hilfreich

Link

+0

möglich Duplikat [Beste Art und Weise Datum/Uhrzeit in mongodb speichern] (http://stackoverflow.com/questions/3778428/best-way- to-store-date-time-in-mongodb) –

+0

"Eclipse-Plugin für Mongodb" gibt viele verschiedene Google-Treffer. Können Sie es auf ein bestimmtes Produkt eingrenzen? –

+0

mongo-java-driver-2.12.0-rc2.jar – itaied

Antwort

19

Der Standardtreiber nimmt java.util.date Typen und serialisiert als BSON Termine. Also mit einem Sammelobjekt auf „Beispiel“

Date now = new Date(); 

BasicDBObject timeNow = new BasicDBObject("date", now); 
example.insert(timeNow); 

Wenn Sie nach einem Weg suchen, um die „Server“ Zeit in Betrieb zu verwenden, ist es die $currentDate Betreiber, aber das funktioniert mit „Updates“, so würden Sie eine „Upsert“ Operation wollen:

BasicDBObject query = new BasicDBObect(); 
BasicDBObject update = new BasicDBObject("$currentDate", 
    new BasicDBObject("date", true) 
); 

example.update(query,update,true,false); 

Da das tatsächlich eine Update-Anweisung ist, müssen Sie vorsichtig sein, dass Sie nicht wirklich alle Dokumente passend, wenn Sie dies beabsichtigen, nur ein Einsatz zu sein. Es wäre also am besten sicherzustellen, dass Ihre "Abfrage" eindeutige Informationen enthält, z. B. ein neu generiertes _id oder etwas Ähnliches.

+0

Dies nimmt das Datum von der aktuellen Arbeitsmaschine. Nehmen wir an, der Mongo läuft auf einem anderen Server, und es gibt eine kleine Zeitdifferenz. Ich möchte das Datum in der anderen Maschine anzeigen, damit ich den Unterschied sehen kann, selbst wenn es eine Minute ist. – itaied

+0

@Candroid Sie sollten wirklich machen sicher, dass die Zeiten synchronisiert sind, aber es gibt eine Möglichkeit, die Serverzeit zu verwenden. –

2

verwenden:

db.example.insert({"date":new Date(Date.now())}); 
+0

Ich muss es in Java schreiben. Wie kann ich das in java eclipse mit mongo plugin schreiben? Ich habe versucht, den "Befehl" zu verwenden, aber es hat nicht funktioniert – itaied

+0

Können Sie Ihre Antwort ein wenig erklären? – Qix

+0

Der Befehl, den Sie geschrieben haben, wurde für die Mongo-Shell geschrieben. Ich möchte diesen Befehl in Java-Sprache ausführen, also ist meine Frage, wie es geht? Was ist die richtige Syntax? – itaied

2

Sie können es so etwas wie dies versuchen:

db.example.insert({"date":ISODate("2016-03-03T08:00:00.000")}); 
+2

Für mich funktionierte "ISODate" und nicht "Date". –

+0

Wenn Sie 'ISODate()' schreiben, wird dieses Feld die aktuelle (beim Einfügen) Datetime sein. – totymedli

Verwandte Themen