万年素人からHackerへの道

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

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    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