我有一个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
是唯一索引,因此我尝试通过该值来选择要更新的文档,并且它可以正常工作。
有什么想法吗?