次のような構造のドキュメントがあります。
{
"_id" : 1000001,
"ListMembers" : [
{
"MemberID" : 1000,
"Notes" : "Test Notes for 1000"
},
{
"MemberID" : 1001,
"Notes" : "Test Notes for 1002"
}
]
}
アプリケーションは一意の ID を生成します。私は以下を達成する必要があります:
- ドキュメントが存在しない場合は、配列フィールドを使用して新しいドキュメントを挿入します。
- ドキュメントがコレクションに存在し、メンバー レコードが配列に存在する場合は、メンバー ノートを更新します。
- ドキュメントがコレクションに存在し、メンバー レコードが配列に存在しない場合は、配列にメンバー レコードを挿入します。
ここで #1 と #2 は正常に機能しますが、上記の #3 では {upsert:true} オプションが機能しません。ドキュメントは存在するがメンバーレコードが存在しない場合、同じIDで新しいドキュメントを挿入しようとしますが、明らかに重複キーエラーが発生します。MongoDB はこのシナリオで UPSERT 操作をサポートしていますか、それともドキュメントの存在を確認してから、#1 と ($pull と $push) に対して INSERT を実行して、配列フィールドで #2 と #3 を達成する必要がありますか。