findAndModifyについて
MongoDBのクエリの一つ、findAndModify
便利なクエリなんだけど、制約も多いのでメモ。
MongoDBのドキュメントにも載っていることなので、詳しくはそちらを。
- 更新は1ドキュメントのみ
要はfindOneして見つかったデータのみ更新されると思えば良い。
こんなかんじのクエリを実行しても、更新されるのは最初の1件のみ。
db.test.findAndModify({query : {hoge:{$in:["a", "b", "c"]}}, update : {$set:{foo:100}}})
- shard keyを含まないクエリはエラーになる
これは知らずにやってしまうと結構問題になったりするかも。ローカルの環境ではshardingなんてやらないことがほとんどだと思うので。
sharding構成をとっている場合、検索のキーにはshard keyを含む必要がある。
これを満たしていないと問答無用でエラーにる。
// shard key : "hoge"の場合 // これはOK db.test.findAndModify({query : {hoge:"a"}, update : {$set:{foo:100}}}) // これはアウト db.test.findAndModify({query : {piyo:"a"}, update : {$set:{foo:100}}})