Невозможно обновить объект Inner Arraylist с помощью Java-драйвера Mongodb

У меня ниже структура документа в базе данных mongodb:

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

Я хотел бы обновить поле оценки первого объекта с помощью драйвера Java-mongodb: я пробовал следующий код, но он не работает :(:

  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);

Пожалуйста, помогите мне решить эту проблему .. Я проверил все параметры, которые я передал для функции обновления. Я думаю, что что-то не так с логикой обновления :(


person Galaxy    schedule 01.02.2014    source источник
comment
Вы запускали findOne с запросом на обновление только для того, чтобы убедиться, что получаете ожидаемый документ?   -  person brwngrldev    schedule 01.02.2014
comment
@adavis: Да, я пробовал с findOne, и эта запись существует в базе данных.   -  person Galaxy    schedule 02.02.2014


Ответы (2)


Вы были близки. Вы удалили позиционный оператор из обновления. Отредактируйте свой код, как показано.

DBObject data=new BasicDBObject("$set",new BasicDBObject("eidlist.$.score",100));
person Neil Lunn    schedule 01.02.2014
comment
Мне жаль, что ваше решение было правильным. У меня проблема в типе данных. В базе данных eidlist. $. Score поле является строкой, и я передаю целочисленное значение в запросе на обновление .. :) - person Galaxy; 02.02.2014
comment
Ага. Я был слишком быстр и на это тоже не смотрел. Хороший подбор. - person Neil Lunn; 02.02.2014

Решение этой проблемы:

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

Убедитесь, что тип данных каждого поля, используемого в запросе на обновление, должен быть совместим с тем, что мы сохранили в mongodb :)

person Galaxy    schedule 02.02.2014