Как добавить новое значение в список в mongodb?

Я хочу вставить новый элемент в массив "CarList" ниже. Я использую MongoDB и dropwizzard в своем проекте.

{
    "_id": "56aa6119bf78f37eee64697e",
    "name": "Jack",
    "occupation": "business*emphasized text* owner",
    "carList": [{
        "brand": "Ford",
        "cost": "$25000"
    }, {
        "brand": "Mazda",
        "cost": "$23000 "
    }]
}

Мои занятия POJO:

public class CarOwners {

    @ObjectId
    public String _id;
    public String name;
    public String occupation;
    public List<CarDetails> carList;
}

public class CarDetails
{
    public String brand;
    public String cost;
}

Мой код для добавления новой записи в carList:

CarDetails newCarInfo = new CarDetails();
newCarInfo.brand="Toyota";
newCarInfo.cost="$20000";

BasicDBObject ownerQuery = new BasicDBObject("name", "Jack");
carOwnerCollections.update(ownerQuery, new BasicDBObject("$addToSet", new BasicDBObject("carList",newCarInfo)));

Ошибка, которую я получаю:

org.codehaus.jackson.map.JsonMappingException: Can not instantiate value of type [simple type, class data.CarDetails] from JSON String; no single-String constructor/factory method (through reference chain: data.PropertyLedger["carList"])

Из ошибки я могу предположить, что проблема заключается в проводке к классу CarDetails. Я не уверен, как это решить. Я просмотрел обновление вложенных документов в Mongo и подобные ссылки, но не мог найти ответ.

Любые указатели будут полезны. Спасибо.


person matuda    schedule 28.01.2016    source источник


Ответы (1)


Попробуйте сделать это с помощью оператора $push для массивов в MongoDB.

BasicDBObject ownerQuery = new BasicDBObject("name", "Jack");
//Below code will insert the new object to the existing carList array
carOwnerCollections.update(ownerQuery, new BasicDBObject("$push", new BasicDBObject("carList",new BasicDBObject("brand","Toyota").append("cost","$20000"))));
person Ankit Nigam    schedule 09.06.2016