mongodb - 如何通过 Java 驱动程序使用 Mongodb 批量更新?

标签 mongodb mongo-java

我正在使用 Mongo Bulk Update,并使用其 Java 驱动程序 2.13。

    MongoClient mongo = new MongoClient("localhost", 27017);
    DB db = (DB) mongo.getDB("test");
    DBCollection collection = db.getCollection("collection");
    BulkWriteOperation builder = collection.initializeOrderedBulkOperation();
    builder.find(new BasicDBObject("_id", "1")).update(new BasicDBObject("_id", "1").append("name", "dev"));

我遇到以下异常:

Caused by: java.lang.IllegalArgumentException: Update document keys must start with $: _id
at com.mongodb.DBCollectionImpl$Run.executeUpdates(DBCollectionImpl.java:769)
at com.mongodb.DBCollectionImpl$Run.execute(DBCollectionImpl.java:734)
at com.mongodb.DBCollectionImpl.executeBulkWriteOperation(DBCollectionImpl.java:149)
at com.mongodb.DBCollection.executeBulkWriteOperation(DBCollection.java:1737)
at com.mongodb.DBCollection.executeBulkWriteOperation(DBCollection.java:1733)
at com.mongodb.BulkWriteOperation.execute(BulkWriteOperation.java:93)

最佳答案

错误的原因是因为在进行更新时必须使用更新运算符。请参阅http://docs.mongodb.org/manual/reference/operator/update/获取更新操作符列表。

从您的示例中,我发现您将名称字段设置为“dev”,因此您需要使用 $set 运算符,如下所示:

builder.find(new BasicDBObject("_id", "1"))
       .update(new BasicDBObject("$set", new BasicDBObject("name", "dev")));

关于mongodb - 如何通过 Java 驱动程序使用 Mongodb 批量更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30320412/

相关文章:

java - 如何在 Java Mongo 中指定多个条件

python - 将 MongoDB 中的所有 MongoDB 日期时间字符串更新为 ISO 日期时间格式

javascript - 这种在node.js中访问mongodb的方式可以接受吗?

node.js - 更新 Meteorjs 应用程序后,MongoDB 数据库会发生什么情况?

java - 解析 JSON 并指定投影时的 com.mongodb.util.JSON.parse 限制

java - Mongo打开了太多的连接

arrays - 如何使用 mongodb 只将键值放入数组?

mongodb - 在CQRS中处理大量非规范化读取模型更新

java - 是否可以使用 Mongodb java 的 json 对象填充其他字段?

java - 检索数组中的子文档作为 DBObject(s)