22

如何使用 java-driver 将数据插入到 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

4

4 回答 4

25

如果您使用的是mongo-java driver 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);
  }
于 2015-11-28T04:23:01.890 回答
18

您不能设置_idifdbobject只是一个文档并且不包含更新运算符,例如:$set, $setOnInsert.

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

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

db.getCollection(collection).update(
    new BasicDBObject("_id", "12"), 
    new BasicDBObject("$set", new BasicDBObject("Hi", "world")), true, false)
于 2013-06-26T12:51:48.573 回答
3

您可以使用该replaceOne方法并指定ReplaceOptions(自 3.7 起):

private static final ReplaceOptions REPLACE_OPTIONS
      = ReplaceOptions.createReplaceOptions(new UpdateOptions().upsert(true));  

db.getCollection(collection).replaceOne(new BasicDBObject("_id", "12"), dbobject, REPLACE_OPTIONS);

对于旧版本,您可以直接将 传递UpdateOptions给 replaceOne 方法:

private static final UpdateOptions UPDATE_POLICY = new UpdateOptions().upsert(true);
db.getCollection(collection).replaceOne(new BasicDBObject("_id", "12"), dbobject, UPDATE_POLICY);  

文档中所述:

replaceOne() 使用替换文档替换集合中与过滤器匹配的第一个匹配文档。

如果 upsert: true 并且没有文档匹配过滤器,replaceOne() 基于替换文档创建一个新文档。

于 2019-03-09T10:19:26.410 回答
-1

这是为了使用我在网络上找不到的 scala 驱动程序进行更新

con.updateOne(  
            equal("vendor_id", vendorId),          
            inc("views_count", f.views),
            UpdateOptions().upsert(true)) 

为此,请导入以下内容

import org.mongodb.scala.model.UpdateOptions
于 2020-02-25T09:25:10.053 回答