2016-01-28 4 views
0

Я хочу добавить новый элемент в массив «CarList» ниже. Я использую MongoDB и dropwizzard в своем проекте.Как добавить новое значение в список в mongodb?

{ 
    "_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; 
} 

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

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 класс является проблемой. Я не уверен, как его решить. Я просмотрел updating nested documents in Mongo и аналогичные ссылки, но не смог найти ответ.

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

ответ

0

Попробуйте сделать это с помощью оператора $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"))));