如何使用 mongodb-java-driver 进行更新

2022-09-01 22:37:23

如何使用java驱动程序将数据重新插入mongodb集合中?

我尝试(使用空集合):

db.getCollection(collection).update(new BasicDBObject("_id", "12"), dbobject, true, false);

但是文档是用_id == ObjectID(...)创建的。不具有“12”值。

此代码 (js) 按预期添加_id = “12” 的文档

db.metaclass.update(
   { _id:12},
   {
     $set: {b:1}
   },
   { upsert: true }
)

mongo-java-driver-2.11.2


答案 1

如果您使用的是 mongo-java 驱动程序 3,则以下带有标志的方法有效。.updateOne(){upsert, true}

 void setLastIndex(MongoClient mongo, Long id, Long lastIndexValue) {

    Bson filter = Filters.eq("_id", id);

    Bson update =  new Document("$set",
                  new Document()
                        .append("lastIndex", lastIndexValue)
                        .append("created", new Date()));
    UpdateOptions options = new UpdateOptions().upsert(true);

    mongo.getDatabase(EventStreamApp.EVENTS_DB)
         .getCollection(EventCursor.name)
         .updateOne(filter, update, options);
  }

答案 2

您无法设置 if 只是一个文档,不包含更新运算符,例如: , ._iddbobject$set$setOnInsert

仅传递文档将替换整个文档,这意味着它不会将 a 设置回退到_idObjectId

因此,如果您使用更新运算符,则您的示例有效,例如:

db.getCollection(collection).update(
    new BasicDBObject("_id", "12"), 
    new BasicDBObject("$set", new BasicDBObject("Hi", "world")), true, false)