java_dude
java_dude

Reputation: 4088

Insert a complete list in MongoDB

I have List of complex object and the complex object contains more than two fields. Something like - {car1, car2, car3} and car has name and type field

Is there a simpler way of inserting a list of car? Something like

DBObject updateObject = new BasicDBObject().append("$push", new BasicDBObject().append("cars", cars)

I tried with $pushAll and it does not seems to be work. I did bit more research and I found it needs information about mapping and that is one of the reasons why this insertion is failing.

What's the best way to do this insertion into MongoDB? Some sample code or direction would be helpful. Please note this has to be done through Java.

Upvotes: 2

Views: 4230

Answers (1)

rompetroll
rompetroll

Reputation: 4799

Well, if you don't want to translate your car objects to DBObjects manually, there are Mapping Frameworks out there. like Morphia.

Personally, I would just wire up a mapping method manually though. Code could look like this (untested, typos to be expected)

BasicDBObject updateObject = new BasicDBObject();
BasicDBList dbCarList = mapCars(cars);
updateObject.append("$push", new BasicDBObject("cars", dbCarList));

...
private BasicDBList mapCars(List<Car> cars) {
  BasicDBList result = new BasicDBList();
  for (Car car: cars) {
    BasicDBObject dbCar = new BasicDBObject();
    dbCar.append("name", car.getName());
    result.add(dbCar);
  }

  return result;
}

Update: as Sammaye pointed out in the comments, replace $push with $set for replacing the list. $push will append non-existing elements to the array without removing what's there form before.

Upvotes: 3

Related Questions