如何使用Vert.x MongoClient

时间:2018-11-15 12:06:05

标签: mongodb-query vert.x

我有一个User对象,我刚刚从Mongo DB中重试过。因此,我知道它的_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 Shell中,我需要显式使用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是唯一索引,因此我尝试通过该值来选择要更新的文档,并且它可以正常工作。

有什么想法吗?

0 个答案:

没有答案