Я хочу обновить базу данных mongo из моего приложения Java с текущим временем DB (а не временем JVM).
Если бы у меня была оболочка, я бы выполнил следующую команду:
db.colletion.update({_id : 'doc'}, {$set : { last_update : ISODate()}}, true, false);
Я не уверен, как перевести его в java:
Object lastUpdate = ???;
DBObject q = new BasicDBObject("_id", "doc");
DBObject o = new BasicDBObject("$set", new BasicDBObject("last_update", lastUpdate));
collection.update(q, o, true, false);
Я пытаюсь выяснить, какой должен быть объект lastUpdate
.
Новый экземпляр Date
не является вариантом, поскольку он будет представлять время JVM, а не время DB.
Я думал об использовании eval
чтобы получить время от DB
, но это будет стоить дополнительный запрос для каждого обновления.
Любые другие идеи?
Единственный способ сделать это - использовать eval
. Из документации eval
:
Если вы хотите использовать интерпретатор серверов, вы должны запустить
eval
. В противном случае интерпретатор JavaScript-интерпретатора mongo оценивает функции, введенные непосредственно в оболочку.
даже команда, которую вы отправили, будет использовать время клиента, а не время сервера, потому что конструктор ISODate
будет оцениваться на клиенте/оболочке.
Следующая версия MongoDB (2.6) поддерживает оператор update current current. Подробнее см. Http://docs.mongodb.org/master/release-notes/2.6/#write-operation-improvements.