web-dev-qa-db-ja.com

mongodb insertコマンドに「upsert」オプションはありますか?

これはばかげた質問かもしれませんが、MongoDBの挿入にupsertオプションがあることを電子書籍で読みました。これに関する適切なドキュメントが見つかりませんでした。誰かがこれについて教育してもらえますか?

47
astroanu

upsertは、「クエリ条件に一致するドキュメントがない場合に新しいドキュメントを作成する操作として定義されているため」であり、upsertsin insertコマンド。これは、updateコマンドのオプションです。以下のようなコマンドを実行すると、updatequeryに一致するドキュメントがある場合、またはinsertとして記述されたドキュメントを持つupdateとして機能します。引数

db.collection.update(query, update, {upsert: true})

MongoDB 3.2は replaceOne を追加します:

db.collection.replaceOne(query, replacement, {upsert: true})

これは同様の動作をしますが、replacementには更新演算子を含めることはできません。

104
zero323

PKDが提供するリンクのように、db.collection.insert()はアップサートの可能性を提供しません。代わりに、mongo insertは新しいドキュメントをコレクションに挿入します。アップサートは、db.collection.update()およびdb.collection.save()を使用した場合にのみ可能です。

既にコレクションにあるdb.collection.insert()にドキュメントを渡し、既存の_idと同様の_idを持っている場合、重複キー例外がスローされます。

5
glormph