2016-10-19 2 views
1

私たちはMongoをバージョン2.xから3.xにアップグレードしています。古い(Java)コードを新バージョンのものに更新し、廃止予定のメソッドを避けようとしていますが、できるだけ機能を変更しようとはしません。私はコードのオリジナル版を書いていませんでした。Mongoを3.xにアップグレードする。 insertはもはや返さないWriteResult

次の変更が混乱しています。以前は、WriteResultオブジェクトを返したDBCollection.insert(args)を返しました。これでMongoCollection.insertOne(args)を使用する必要がありますが、これは何も返しません。 WriteResultオブジェクトを作成する別の方法はありますか?

また、WriteResultのオブジェクトは必要ではないというMongo開発チームの意見ですか?私はそれがかなり不可欠な方法で使用していることを知ることができますが、正当な理由がなければ削除したくありません。

上記はすべてinsertManyにも当てはまりますが、同じか類似した回答があると思います。方法はinsertは、例えば

1.、いくつかの手動チェックを必要に応じて、問題の状況を処理するためにいくつかの利点を提供します

答えて

1

insertOne())それはError Handlingをサポートあなたは単にあなたを伝えることができたtry-catchブロックであなたの挿入コードを使用する必要があります意味、何かが間違っていた(ユニークなインデックスの重複したエントリを挿入するような)ので、現在のフローの代わりに他のものを実行します。

InsertOneがを返します:

  • のボイド:クエリが正常に完了したことを意味
  • 例外:さまざまな例外が
として失敗挿入のための異なる-2の原因を表すスローされます
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 

だから、あなたは、単に挿入失敗のすべての可能性を処理するために、3つの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} 

相談のようになります: - 私は例外投げが多くでWriteResultを不要にする方法を見てあなたは

  • try-catch問題の少ないコードでの優れた実践結果
+0

は非常に役立つ、詳細な回答をありがとう取得しますケース。しかし、insertOneの戻り値の型が 'void'のときは、少なくとも" insertOne returns ... "と答えるのは混乱します。 'insertOne'が何かを返す意味がありますか?どのように私は価値を得るのですか? –

+0

@Richardあなたの歓迎をお待ちしております。この[link](https://docs.mongodb.com/v3.2/reference/method/db.collection.insertOne/)をチェックしてください。insertOneは承認とid、void何らかの例外が発生した場合にのみ発生する可能性がありますが、引き続き 'e'が例外に関する望ましい情報を提供します –

+0

同じことについて話していますか? Java APIでは、メソッドの戻り値の型は無効です。 –

関連する問題