mongodbを使ってみる (2) - operators -
更にもうちょいドキュメント進めてみる
$set/$unsetオペレーター
db.samples.insert({ name: "hoge" })
db.samples.update({ name: "hoge" }, { size: 1 })
db.samples.find()
// 出力: { "_id" : ObjectId("50f358d043555c5360e9507d"), "size" : 1 }
というように、おいnameどこいった的な事になる模様。こういう場合新しいデータを追加するような前提であれば
db.samples.insert({ name: "hoge" })
db.samples.update({ name: "hoge" }, { $set: { size: 1 }})
db.samples.find()
// 出力: { "_id" : ObjectId("50f3591143555c5360e9507e"), "name" : "hoge", "size" : 1 }
というように$setオペレーターを利用する事で既存するデータに新しい値を追加するという方式を採用できる模様
で引き続き、sizeデータだけを消す場合は
db.samples.update({ name: "hoge" }, { $unset: { size: 1 }})
db.samples.find()
// 出力: { "_id" : ObjectId("50f35a8d43555c5360e9507f"), "name" : "hoge" }
$push/$pushAll/addToSetオペレーター
db.samples.insert({ values: [] })
db.samples.update({ "_id": ObjectId("50f35ba5da8178ec5484b11e") }, { $push: { values: "A" }})
db.samples.update({ "_id": ObjectId("50f35ba5da8178ec5484b11e") }, { $push: { values: "B" }})
db.samples.find()
// 出力: { "_id" : ObjectId("50f35ba5da8178ec5484b11e"), "values" : [ "A", "B" ] }
てな感じで。でArrayで$pushするフィールドが存在しなければ[フィールドに指定した値で、存在するけどArrayじゃない場合にはエラーが発生するらしい(検証ではなぜか出てこない)
でpushAllな場合はフィールドに指定する値がArrayで指定出来て、それにマージするような感じかなーっと。多分
で$addToSetの場合は配列型でかつ、値が存在しない場合のみ追加処理が行われる模様
$incオペレーター
db.samples.insert({ name: "hoge", size: 1 })
db.samples.update({ name: "hoge" }, { $inc: { size: 2 }})
db.samples.find()
// 出力: { "_id" : ObjectId("50f35de7da8178ec5484b123"), "name" : "hoge", "size" : 3 }
あくまで1づつ足していくような感じじゃなくて、$incで指定したフィールドの値分だけを足していく模様。ちなみに$incのフィールド値に文字列型とか入れると
Modifier $inc allowed for numbers only
っていう感じで怒られる