rmi*_*min 10 java scala mongodb casbah mongodb-java
使用mongodb java驱动程序的第3版(特别是v3.0.1)来复制文档的惯用方法是什么?
我们有一个会话集合,当一个新会话被创建或修改时,我们想要在一个操作中插入它 - 而不是必须查询文档是否存在然后插入或替换.
我们的旧upsertion代码使用了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
)
Run Code Online (Sandbox Code Playgroud)
在我们当前的项目中,我们只是使用普通的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
)
Run Code Online (Sandbox Code Playgroud)
这会抛出错误"java.lang.IllegalArgumentException:无效的BSON字段名称......".这个问题涵盖了这个错误,但该问题中的操作并不是试图在一个操作中插入 - 他们使用上下文来决定是否替换/更新/插入等...
我对scala或java中的代码示例感到满意.
谢谢!
Ros*_*oss 13
在Mongo Java Driver 3.0系列中,我们添加了一个新的Crud API,它更加明确,因此对初学者友好.这个计划已经在许多MongoDB驱动程序上推出,但它确实包含了与旧API相比的一些变化.
由于您没有使用更新运算符更新现有文档,因此该updateOne
方法不合适.
您描述的replaceOne
操作是一个操作,可以像这样运行:
sessionCollection.replaceOne(
"_id" -> new BsonString(sessionKey),
sessionDocument,
(new UpdateOptions()).upsert(true)
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11137 次 |
最近记录: |