0

我有汽车列表 { car​​1, car2, car3 },每辆车至少有两个或更多字段。该列表被转换为 BasicDBList。这里的例子

DBObject saveObject = new BasicDBObject().append("$push", dbBasicListOfCars);
collection.(car).save(saveObject);

它无法将列表保存在自己的集合中,并抱怨该字段不能以“$”符号开头。

如何将整个列表推送到集合中?还是我必须将个别汽车保存在收藏中?

4

1 回答 1

1
new BasicDBObject().append("$push", dbBasicListOfCars);

在上面的语句中,您尝试在 DBObject 中插入一个键值对,键为"$push",值为dbBasicListOfCars。MongoDB 不允许键有'$',因此它失败了。

但是,您尝试保存的方式也是错误的。

您需要的是 com.mongodb.BasicDBList,它是一个允许创建数组 DBObjects 的实用程序类。BasicDBList 仅支持数字键。传递无法转换为整数的字符串将导致 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, "1" : null, "2" : value3, "3" : null, "4" : value2 } 来模拟数组 [ value1, null, value3, null, value2 ] .

于 2012-12-08T06:21:50.260 回答