Java + MongoDB:更新文档中的字段数量

3

我想一次性更新文档中的多个字段,我想要修改列表中 "md5" 的值为 "download=0"。但是当我运行代码时,它会抛出一个异常:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)

这是我正在做的事情:
//the list is an list of "md5"

List<BasicDBObject> updateCondition=new ArrayList< BasicDBObject>(list.size());  
for(int i = 0 ; i < list.size(); i++) {
    updateCondition.get(i).put("md5", list.get(i));
    DBObject updatedValue=new BasicDBObject();  
    updatedValue.put("download", 0);   
    DBObject updateSetValue=new BasicDBObject("$set",updatedValue);               
    vt_col.update(updateCondition.get(i), updateSetValue);  
} 

异常发生在:
 updateCondition.get(i).put("md5", list.get(i));

我希望你能帮助我,感谢你的帮助。

1个回答

2

在这里,调试会对你非常有帮助。我不能百分之百确定,但我认为你的updateCondition可能为空。

你正在尝试访问updateCondition(0)... 但你只是用以下方式创建它:

new ArrayList< BasicDBObject>(list.size()); 

异常抛出是因为列表中没有任何对象,您需要将列表复制到updateCondition列表中。

希望能对您有所帮助。


这个答案是正确的。为了详细说明为什么会发生这种情况:构造函数 ArrayList<T>(int initialCapacity) 并不会创建一个具有 initialCapacity 条目的列表,而是创建一个空列表,并为其保留了 initialCapacity 条目的内存空间。设置集合的保留容量是一种纯性能优化,但并不会对其行为产生任何影响。 - Philipp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接