在MongoDB中插入完整列表

时间:2012-12-07 09:04:34

标签: java mongodb

我有List复杂对象,复杂对象包含两个以上的字段。类似于 - {car1, car2, car3}和汽车的名称和类型字段

是否有更简单的方法来插入汽车列表?像

这样的东西
DBObject updateObject = new BasicDBObject().append("$push", new BasicDBObject().append("cars", cars)

我尝试使用$pushAll并且它似乎不起作用。我做了更多的研究,我发现它需要有关映射的信息,这就是为什么这个插入失败的原因之一。

将此插入MongoDB的最佳方法是什么?一些示例代码或方向会有所帮助。请注意,这必须通过Java完成。

1 个答案:

答案 0 :(得分:2)

好吧,如果您不想手动将汽车对象转换为DBObjects,那么就有了Mapping Frameworks。比如Morphia

就个人而言,我只是手动连接一个映射方法。代码可能看起来像这样(未经测试,预计会出现拼写错误)

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

更新:正如Sammaye在评论中指出的那样,用$ set替换$ push替换列表。 $ push会将不存在的元素附加到数组中,而不会删除之前的形式。