mongodbを使ってみる (2) - operators -

2013-01-14T00:00:00+00:00 MongoDB

更にもうちょいドキュメント進めてみる

$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

っていう感じで怒られる

mongodbを使ってみる node.jsでdocument/window依存なスクリプトをグダる (2)