У меня есть User
объект, который я только что повторил из БД Mongo.Таким образом, я знаю его _id
.Теперь мне нужно обновить поле last_connection_ts
(отметка времени последнего соединения) для этого документа.
Следующий код не работает:
// Select the document to update
JsonObject query = new JsonObject()
.put("_id", new JsonObject().put("$eq", user.getId())); // <<<<<<
// define the new value
long now = System.currentTimeMillis();
JsonObject upd = new JsonObject()
.put("$set", new JsonObject().put("last_connection_ts", new Long(now)));
// do the insert
mongo.updateCollection("users", query, upd, res -> { ... });
Я полагаю, это потому, что _id
это не String
, а ObjectId(<string>)
.В оболочке MongoDB мне нужно явно использовать ObjectId()
, чтобы обновить документ:
> db.users.update(
... {"_id" : {$eq : ObjectId("5bebd4c35afdb94ebb3f1e69")}},
... {$set : {"last_connection_ts" : NumberLong(-1)}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Я попытался преобразовать результат getId()
в Object
или определить getIdAsObject()
(на всякий случай) но это не помогло.Поскольку username
пользователя является уникальным индексом, я попытался выбрать документ для обновления по этому значению, и он работает.
Есть идеи?