MongoDB(Java):将多个文档有效地更新为不同的(!)值

我有一个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();
        }```
hlw13781927235 回答:MongoDB(Java):将多个文档有效地更新为不同的(!)值

MongoDB提供bulk write API来批量更新。对于您将每个文档的字段值设置为随机值(由客户端确定)的示例来说,这将是适当的。

或者,如果需要的更改有某种模式,则可以将find and modify operation与可用的update operators一起使用。

本文链接:https://www.f2er.com/2512488.html

大家都在问