[MongoDB] 既存データに追加する形でUpdate
$setを利用してUpdateを行う
mongodbではそのままupdateを行うと、デフォルトの動作ではupdateを行ったデータで置き換える処理を行います。これを防ぐために$setを利用する方法があります。
$setを利用すると既存のデータをそのままにして、UPDATE対象になる要素を追加した状態でデータの更新を行うことができます。データとコマンドを追っかけながら行ったほうが早いと思うので。
コマンドを打ってのデータ操作
からのデータベースを用意しておもむろにUpsertを行います。
> db.testcollection.find(); .....
Upsertを行います。三番目の引数にtrueを入れると検索条件がなければインサートを行います。
> db.testcollection.update( {model: "2014"}, {price: 1000, name: "mac book pro", model: "2014"}, true ); > db.testcollection.find(); { "_id" : ObjectId("534d651941ad73530182496e"), "price" : 1000, "name" : "mac book pro", "model" : "2014" }
ここまででupsertを行ったためデータが1件入っていることを確認しています。
$setを使って更新してみる
> db.testcollection.update( {model: "2014"}, {$set: {price: 1500, option: "keyboard"}}, true ); > db.testcollection.find(); { "_id" : ObjectId("534d651941ad73530182496e"), "model" : "2014", "name" : "mac book pro", "option" : "keyboard", "price" : 1500 }
$setを利用してpriceの更新と新たなデータであるoptionが追記されているのがわかるかと思います。
$setを使わないで更新してみる
もし$setを利用しないとどうなるか試してみます。
> db.testcollection.update({model: "2014"}, {price: 500}, true); > db.testcollection.find(); { "_id" : ObjectId("534d651941ad73530182496e"), "price" : 500 }
$setを利用しないでupdateを行うと指定したデータであるpriceしか残りませんでした。
もっと詳しく知りたい方は本家のマニュアルへどうぞ
-
前の記事
[Unix] ファイル権限のお勉強 その1 2014.04.11
-
次の記事
[ubuntu]やたら起動しているconsole-kit 2014.04.21