如何用MongoDB Java Driver编写等效于带arrayFilters的更新查询
MongoDB Driver 实现数组过滤的批量更新
以下是对应你给出的MongoDB Shell查询的Java MongoDB Driver实现代码,实现更新pollID为123的文档中,answerAnalytics数组里option为"1"或"2"的元素的selectCount字段自增1,并且更新所有符合条件的文档:
import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.model.Updates; import com.mongodb.client.model.UpdateOptions; import org.bson.Document; import java.util.Arrays; public class PollUpdateHandler { public static void main(String[] args) { // 连接MongoDB try (var mongoClient = MongoClients.create("mongodb://localhost:27017")) { MongoCollection<Document> collection = mongoClient.getDatabase("your_database_name").getCollection("your_collection_name"); // 构建查询条件:匹配pollID=123的文档 Document filter = new Document("pollID", 123); // 构建更新操作:对指定数组元素的selectCount字段自增1 var updateOperation = Updates.inc("answerAnalytics.$[element].selectCount", 1); // 配置更新选项:数组过滤器 + 批量更新 UpdateOptions updateOptions = new UpdateOptions() .arrayFilters(Arrays.asList( new Document("$or", Arrays.asList( new Document("element.option", "1"), new Document("element.option", "2") )) )) .multi(true); // 执行批量更新 collection.updateMany(filter, updateOperation, updateOptions); } } }
关键说明:
- 使用
updateMany方法替代Shell中的update+multi: true,语义更清晰 - 通过
UpdateOptions.arrayFilters传入数组过滤条件,对应Shell中的arrayFilters配置 Updates.inc方法封装了$inc操作符,实现字段自增
内容的提问来源于stack exchange,提问作者Manish Sharma
相关产品推荐
相关产品推荐

