我们正在将Mongo从版本2.x升级到3.x,我的任务是将旧的(Java)代码更新为所有版本的新版本,尝试避免弃用的方法,但试图改变功能尽可能少。我没有写过代码的原始版本。
以下更改让我感到困惑。之前,我们使用DBCollection.insert(args)
返回了一个WriteResult
对象。现在我们应该使用MongoCollection.insertOne(args)
,但这不会返回任何内容。是否有另一种方法来生成WriteResult
对象?
或者Mongo开发团队认为WriteResult
对象不是必需的?我可以看到我们以相当不必要的方式使用它(只是记录)但我不想在没有充分理由的情况下删除它。
以上所有内容也适用于insertMany
,我认为它会有相同或相似的答案。
答案 0 :(得分:1)
insertOne()
方法提供了一些优势来处理有问题的情况,其中insert
需要一些手动检查,例如
1。)它支持Error Handling
意味着您必须在try-catch
块中使用插入代码,它可以告诉您,出现了问题(例如为唯一索引插入重复条目),所以请执行其他操作而不是当前的流量。
InsertOne返回:
- void:表示查询成功完成
- 例外:抛出各种异常,表示插入失败的不同原因
MongoWriteException - if the write failed due some other failure specific to the insert command
MongoWriteConcernException - if the write failed due being unable to fulfill the write concern
MongoException - if the write failed due some other failure
所以你可以简单地添加三个catch块来处理所有插入失败的可能性,如果没有抛出异常,则意味着数据插入成功(无需检查任何内容,快速继续),代码就像
try {
.. insert query
}catch(MongoWriteException e){ .. handle something wrong with query}
catch(MongoWriteConcernException e){ .. handle something wrong with write-concern}
catch(MongoException e){ .. handle something else(unknown) went wrong}
咨询:你会得到
try-catch
良好的做法可以减少代码问题