[解決済み] MongoDB atomic "findOrCreate": findOne, insert if nonexistent, but do not update
2022-08-02 18:38:48
質問
タイトルの通り、_idでドキュメントを検索(1件)し、存在しない場合は作成し、見つかったか作成されたかをコールバックで返したいのです。
私はfindAndModifyがそうするのを読んだように、それが存在する場合、私はそれを更新したくありません。私はこれに関してStackoverflowで他の多くの質問を見ましたが、再び、何も更新したくありません。
私は(存在しないの)作成によって、thatが実際に誰もが話している更新であるかどうかわからない、それはすべてとても混乱している:(。
どのように解決するのですか?
MongoDB 2.4 以降、一意なインデックス (あるいはその他の回避策) を使ってアトミックな
findOrCreate
のような操作のために一意なインデックスやその他の回避策に頼る必要はなくなりました。
これは
のおかげです。
$setOnInsert
演算子
は 2.4 の新機能で、ドキュメントを挿入するときにのみ起こるべき更新を指定することができます。
この演算子と
upsert
オプションと組み合わせることで
findAndModify
を使うと、アトミックな
findOrCreate
-のような操作になります。
db.collection.findAndModify({
query: { _id: "some potentially existing id" },
update: {
$setOnInsert: { foo: "bar" }
},
new: true, // return new doc if one is upserted
upsert: true // insert the document if it does not exist
})
として
$setOnInsert
は挿入されるドキュメントにのみ影響するので、 既存のドキュメントが見つかった場合は何も変更されません。 ドキュメントが存在しない場合、指定された_idを持つドキュメントをupsertし、挿入のみのセットを実行します。 どちらの場合も、ドキュメントは返されます。
関連
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】Express.js req.bodyが未定義です。
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み] EventEmitter のメモリリークの可能性が検出された
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] NPMが同じエラーで固まる EISDIR: ディレクトリに対する不正な操作、エラーで読み込み (ネイティブ)
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?
-
[解決済み] 配列フィールドが空でない MongoDB レコードを検索する
-
[解決済み] 別のフィールドの値を使って MongoDB のフィールドを更新する
-
[解決済み】ドキュメントの配列内のオブジェクトを更新する方法(入れ子更新)について)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】ENOENT, そのようなファイルまたはディレクトリがありません。
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] "致命的なエラーです。grunt "コマンドを実行すると、"Unable to find local grunt. "と表示されます。