我有一个MongoDB数据库,我正在编写的程序旨在更改集合中所有文档的单个字段的值。现在,如果我希望它们全部更改为一个值,例如字符串值“ mask”,那么我知道updateMany
可以解决问题,并且非常有效。
但是,我想要的是一种有效的解决方案,用于更新为不同个新值,实际上,我想从列表中为每个文档选择相关字段的新值。 ArrayList。但是后来这样
collection.updateMany(new BasicDBObject(),new BasicDBObject("$set",new BasicDBObject(fieldName,listOfmasks.get(random.nextInt(size)))));
将不起作用,因为updateMany
不会重新计算该字段应设置为的值,它只是计算参数
listOfmasks.get(random.nextInt(size))
将是一次,然后将其用于所有文档。因此,我认为没有解决方案可以实际使用updateMany
,因为它的通用性不足。
但是我想知道是否有人有什么想法,至少可以使其比简单地遍历所有文档更快,并且每次updateone
都会从ArrayList更新到新值(以随机顺序,但是只是一个细节),如下所示?
// Loop until the MongoCursor is empty (until the search is complete)
try {
while (cursor.hasnext()) {
// Pick a random mask
String mask = listOfmasks.get(random.nextInt(size));
// Update this document
collection.updateone(cursor.next(),Updates.set("test_field",mask));
}
} finally {
cursor.close();
}```