ドキュメントを挿入する場合、MongoDBは、同じObjectIdを持つドキュメントが存在するかどうかを確認する必要があります。存在する場合、ドキュメントを挿入できません。
同じケースがアップデートにも当てはまります。ドキュメントが存在するかどうかを確認する必要があります。そうしないと、更新を実行できません。更新クエリの速度が低下するのは、ObjectId/インデックス付きフィールドに基づいてドキュメントが見つからない場合です。
それ以外の場合、ドキュメントの挿入/更新のパフォーマンスは同じである必要があります。
したがって、Insertは次のようになります//(Fast)
- (ドキュメントを確認->見つかりません->新しいドキュメントを挿入)その他
- (ドキュメントを確認->見つかりました->挿入できません)
そして、upsertで更新します(ObjectIdが利用可能)//(高速)
- (ドキュメントを確認->見つかりません->新しいドキュメントを挿入)その他
- (ドキュメントの確認->見つかった->ドキュメントの更新)
またはupsertで更新(ObjectIdなし)//これは遅い
- (ObjectIdsの検索(遅い)->見つかりません->新しいドキュメントの挿入)その他
- (ObjectIdsの検索(低速)->検索->ドキュメントの更新)