我有汽车列表{car1,car2,car3},每辆汽车至少有两个或更多字段。该列表将转换为BasicDBList。 Example here
DBObject saveObject = new BasicDBObject().append("$push", dbBasicListOfCars);
collection.(car).save(saveObject);
它无法将列表保存在自己的集合中,并且抱怨该字段无法以“$”符号开头。
如何将整个列表推送到集合中?或者我是否需要将个人车保存在收藏中?
答案 0 :(得分:1)
new BasicDBObject().append("$push", dbBasicListOfCars);
在上面的语句中,您尝试在DBObject中插入键值对,键为“$ push”,值为 dbBasicListOfCars 。 MongoDB不允许密钥有'$'因此它失败。
但是,您尝试保存的方式也是错误的。
您需要的是com.mongodb.BasicDBList,它是一个允许创建数组DBObject的实用程序类。 BasicDBList仅支持数字键。传递无法转换为int的字符串将导致IllegalArgumentException。
BasicDBList list = new BasicDBList();
list.put("1", "bar"); // ok
list.put("1E1", "bar"); // throws exception
参考:http://api.mongodb.org/java/current/com/mongodb/BasicDBList.html
注意:MongoDB还将从java.util.Lists创建数组。
DBObject obj = new BasicDBList();
obj.put( "0", value1 );
obj.put( "4", value2 );
obj.put( 2, value3 );
这通过创建DBObject {“0”来模拟数组[value1,null,value3,null,value2]:value1,“1”:null,“2”:value3,“3”:null,“4” :value2}。