我有List
复杂对象,复杂对象包含两个以上的字段。类似于 - {car1, car2, car3}
和汽车的名称和类型字段
是否有更简单的方法来插入汽车列表?像
这样的东西DBObject updateObject = new BasicDBObject().append("$push", new BasicDBObject().append("cars", cars)
我尝试使用$pushAll
并且它似乎不起作用。我做了更多的研究,我发现它需要有关映射的信息,这就是为什么这个插入失败的原因之一。
将此插入MongoDB的最佳方法是什么?一些示例代码或方向会有所帮助。请注意,这必须通过Java完成。
答案 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会将不存在的元素附加到数组中,而不会删除之前的形式。