万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Pymongoのupdate

.update({'room_name' : room_name}, {'started_user_list' : []})

のような感じにするのと思った。 そうすると'room_name' = room_nameの条件のカラム内が 'started_user_list' : []になってしまう・・・。

$set — MongoDB Manual 2.6.4

$setを使う。

.update( {'room_name': room_name}, { "$set": {'started_user_list': []} } )

と言った具合。

ちなみに"$set"なので注意。

さらに、複数行の時はmultiオプションが必要。

.update( {'room_name': room_name}, { "$set": {'started_user_list': []} }, multi=True )

MongoDB Blog / Multi-document update & Atomicity ここを見てわかると思うが、

`> db.foo.find() [

{"_id" : ObjectId("4ec2e036e2a13727b"), "text" : "bar", "value" : 11},

{"_id" : ObjectId("4efba63c4d6a58d47"), "text" : "foo", "value" : 22},

{"_id" : ObjectId("4ecee6f9e2534534a"), "text" : "foo bar", "value" : 33},

{"_id" : ObjectId("4e9e46f9e2a4324a0"), "text" : "bar foo", "value" : 44}

]`

に対して、

db.foo.update({"value" : {$gt : 30}}, {$set : {"text" : "blah"}})

を行うと、30より(>30)多いものに対してtextをblahにする。

`> db.foo.find()

[

{"_id" : ObjectId("4ec2e036e2a13727b"), "text" : "bar", "value" : 11},

{"_id" : ObjectId("4efba63c4d6a58d47"), "text" : "foo", "value" : 22},

{"_id" : ObjectId("4e9e46f9e2a4324a0"), "text" : "bar foo", "value" : 44},

{"_id" : ObjectId("4ecee6f9e2534534a"), "text" : "blah", "value" : 33}

]`

となっている。 複数ではなく1つだけなので、

{"_id" : ObjectId("4e9e46f9e2a4324a0"), "text" : "bar foo", "value" : 44},

はそのまま。

MongoDB and Python: Patterns and processes for the popular document-oriented database

MongoDB and Python: Patterns and processes for the popular document-oriented database