如何在 MongoDB Java 驱动程序 3 中更新文档
How to upsert document in MongoDB Java driver 3
使用 mongodb java 驱动程序版本 3(特别是 v3.0.1)更新插入文档的惯用方法是什么?
我们有一个会话集合,当一个新会话被创建或修改时,我们希望在一个操作中更新它——而不是必须查询文档是否存在然后插入或替换。
我们的旧更新代码使用了 scala 驱动程序 casbah 2.7.3。它看起来像:
import com.mongodb.casbah.MongoCollection
import com.mongdb.DBObject
val sessionCollection: MongoCollection = ...
val sessionKey: String = ...
val sessionDocument: DBObject = ... // Either create a new one, or find and modify an existing one
sessionCollection.update(
"_id" -> sessionKey,
sessionDocument
upsert = true
)
在我们当前的项目中,我们只使用普通的 java 3.0.1 驱动程序,我们使用 BsonDocument
而不是 DBObject
以使其更安全。我试图用类似的东西替换上面的内容:
import com.mongodb.client.MongoCollection
val sessionCollection: MongoCollection = ...
val sessionKey: String = ...
val sessionDocument: BsonDocument = // Either create a new one, or find and modify an existing one
val updateOptions = new UpdateOptions
updateOptions.upsert(true)
sessionCollection.updateOne(
"_id" -> new BsonString(sessionKey),
sessionDocument,
updateOptions
)
这将引发错误 "java.lang.IllegalArgumentException: Invalid BSON field name ..."。该错误包含在 中,但该问题中的操作并未尝试在一个操作中插入 - 他们正在使用上下文来决定是否 replace/update/insert 等...
我对 scala 或 java 中的代码示例感到满意。
谢谢!
在 Mongo Java 驱动程序 3.0 系列中,我们添加了一个新的 Crud API,它更明确,因此对初学者友好。该计划已在许多 Mongo 数据库驱动程序中推出,但与旧的 API.
相比确实包含一些变化
由于您不是使用 update operator 更新现有文档,因此 updateOne
方法不合适。
您描述的操作是 replaceOne
操作,可以是 运行 像这样:
sessionCollection.replaceOne(
"_id" -> new BsonString(sessionKey),
sessionDocument,
(new UpdateOptions()).upsert(true)
)
使用 mongodb java 驱动程序版本 3(特别是 v3.0.1)更新插入文档的惯用方法是什么?
我们有一个会话集合,当一个新会话被创建或修改时,我们希望在一个操作中更新它——而不是必须查询文档是否存在然后插入或替换。
我们的旧更新代码使用了 scala 驱动程序 casbah 2.7.3。它看起来像:
import com.mongodb.casbah.MongoCollection
import com.mongdb.DBObject
val sessionCollection: MongoCollection = ...
val sessionKey: String = ...
val sessionDocument: DBObject = ... // Either create a new one, or find and modify an existing one
sessionCollection.update(
"_id" -> sessionKey,
sessionDocument
upsert = true
)
在我们当前的项目中,我们只使用普通的 java 3.0.1 驱动程序,我们使用 BsonDocument
而不是 DBObject
以使其更安全。我试图用类似的东西替换上面的内容:
import com.mongodb.client.MongoCollection
val sessionCollection: MongoCollection = ...
val sessionKey: String = ...
val sessionDocument: BsonDocument = // Either create a new one, or find and modify an existing one
val updateOptions = new UpdateOptions
updateOptions.upsert(true)
sessionCollection.updateOne(
"_id" -> new BsonString(sessionKey),
sessionDocument,
updateOptions
)
这将引发错误 "java.lang.IllegalArgumentException: Invalid BSON field name ..."。该错误包含在
我对 scala 或 java 中的代码示例感到满意。
谢谢!
在 Mongo Java 驱动程序 3.0 系列中,我们添加了一个新的 Crud API,它更明确,因此对初学者友好。该计划已在许多 Mongo 数据库驱动程序中推出,但与旧的 API.
相比确实包含一些变化由于您不是使用 update operator 更新现有文档,因此 updateOne
方法不合适。
您描述的操作是 replaceOne
操作,可以是 运行 像这样:
sessionCollection.replaceOne(
"_id" -> new BsonString(sessionKey),
sessionDocument,
(new UpdateOptions()).upsert(true)
)