【问题标题】:Unable to update Inner Arraylist object using Mongodb Java Driver无法使用 Mongodb Java 驱动程序更新内部 Arraylist 对象
【发布时间】:2014-02-01 19:38:04
【问题描述】:

我在 mongodb 数据库中有以下文档结构:

{
    "_id" : ObjectId("52ec7b43e4b048cd48499b35"),
    "eidlist" : [
        {
            "eid" : "64286",
            "dst" : NumberLong(21044),
            "score" : 0
        },
        {
            "eid" : "65077",
            "dst" : NumberLong(21044),
            "score" : 0
        }
    ],
    "src" : NumberLong(21047)
}

我想使用 Java-mongodb 驱动更新第一个对象的 score 字段: 我尝试了以下代码,但它不起作用:( :

  DBObject update_query=new BasicDBObject("src", key).append("eidlist.eid", e.getEdgeid());
  DBObject data=new BasicDBObject("$set",new BasicDBObject("eidlist.score",100));
 coll.update(update_query, data);

请帮我解决这个问题..我已经检查了我传递给更新函数的所有参数。我认为更新逻辑有问题:(

【问题讨论】:

  • 您是否运行了带有更新查询的 findOne 以确保获得您期望的文档?
  • @adavis:是的,我用 findOne 试过了,这个记录存在于数据库中。

标签: java mongodb mongodb-query mongo-java


【解决方案1】:

你很亲密。您在更新中省略了 positional operator。如图所示编辑您的代码。

DBObject data=new BasicDBObject("$set",new BasicDBObject("eidlist.$.score",100));

【讨论】:

  • 很抱歉您的解决方案是正确的。我得到了数据类型的问题。在数据库中“eidlist.$.score”字段是字符串,我在更新查询中传递整数值.. :)
  • 啊哈。我太快了,也没看那个。不错的选择。
【解决方案2】:

这个问题的解决方法是:

DBObject data=new BasicDBObject("$set",new BasicDBObject("eidlist.$.score",""+100));

确保更新查询中使用的每个字段的数据类型。它应该与我们存储在 mongodb 中的内容兼容:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多