gpt4 book ai didi

java - MongoDB(Java): efficient update of multiple documents to different(!)值

转载 作者:行者123 更新时间:2023-12-01 17:36:23 25 4
gpt4 key购买 nike

我有一个 MongoDB 数据库,我正在编写的程序旨在更改集合中所有文档的单个字段的值。现在,如果我希望它们全部更改为单个值,例如字符串值“mask”,那么我知道 updateMany 可以实现这一点,并且非常高效。

但是,我想要的是更新到不同新值的有效解决方案,实际上我想从列表中为每个文档选择相关字段的新值,例如一个数组列表。但后来是这样的

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();
}```

最佳答案

MongoDB 提供 bulk write API来批量更新。这适用于将每个文档的字段值设置为随机值(在客户端上确定)的示例。

或者,如果所需的更改存在某种模式,您可以使用 find and modify operation可用 update operators .

关于java - MongoDB(Java): efficient update of multiple documents to different(!)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61031643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com