Как обновить документ mongodb, идентифицируемый его `_id`, с помощью Vert.x MongoClient - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть 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 пользователя является уникальным индексом, я попытался выбрать документ для обновления по этому значению, и он работает.

Есть идеи?

...