2017-12-14 13 views
0

Mongodbと通信するために、春のデータmongodbを使用しています。Spring bootからです。Mongodbが存在する場合は、

文書構造:インデックスで

{ 
    "_id" : ObjectId("5a324f8bc23fa147699ee0fb"), 
    "_class" : "com.mongodb.User", 
    "name" : "Prakash", 
    "userId" : NumberLong(1000), 
    "organisation" : "Inbytes", 
    "createdOn" : ISODate("2017-12-14T10:16:43.173Z") 
} 

:userIdを(ユニーク)

私はすでに、 存在"userId" : NumberLong(1000)すなわちを有する任意の文書を挿入した場合、私はこのエラー取得:

WriteResult({ 
    "nInserted" : 0, 
    "writeError" : { 
     "code" : 11000, 
     "errmsg" : "E11000 duplicate key error collection: db.user index: userId dup key: { : 1000 }" 
    } 
}) 

私は毎日100万レコードを更新する必要があるユースケースがあります。

find if they exist, if exist, update or override, else insert:彼らはである...などの名前、ポイント、のように、このユースケースを実現する

一つの方法を自分のフィールドを変更することがあります。

しかし、この方法は膨大なレコードに対して高いレイテンシを持っています。

私のユースケースを実現するためのより良い方法がありますか?ネイティブのMongoDB-javaリポジトリとspring mongo-DBリポジトリの両方が私のために機能します。あなたがIndexedあなたMongocollectionをしましたので、

答えて

0

あなたは

重複キーエラーに

を得ています。

実際に名前付きの既存の索引がある場合は、別の文書を挿入しようとしていて、挿入することはできません。 インデックスは一意であるためです。このユースケースを実現する

一つの方法はである:彼らは、存在する場合、更新またはオーバーライドを存在する場合見つける

、他のYES、明らかに

を挿入します。一部のインデックス付きコレクションでのみ更新できますが、同じIndexの他のドキュメントは挿入できません。

+0

プライマリインデックスを持つドキュメントを挿入すると、それが存在する場合、既存のドキュメントが上書きされます。ユニークなインデックスの場合にこの動作を達成できますか?つまり、ユニークなインデックスを持つドキュメントが存在する場合は、ドキュメントの他のフィールド(thana_idおよびユニークインデックスを持つフィールド)を更新/オーバーライドする必要があります。 –

関連する問題