обновление pymongo не работает - PullRequest
2 голосов
/ 30 января 2012

Я пытаюсь выполнить простое обновление, но данные не обновляются в БД.В следующем фрагменте кода я:

  1. создаем новую учетную запись и вставляем ее в базу данных ( success ),
  2. получаем ее (успех ),
  3. его обновление ( сбой )

Все это выполняется на локальном хосте, экземпляре по умолчанию, без реплики.Я шаг за шагом следил за документацией, но пока не могу понять, что я делаю не так.

from pymongo import Connection
from pymongo.objectid import ObjectId

def _byid(id):
    return ObjectId(id)

class Account(object):
    collection = Connection().testdb.accounts

    def insert(self, data):
        return self.collection.insert(data)

    def byid(self, id):
        return self.collection.find({"_id": _byid(id)})

    def update(self, id, data):
        return self.collection.update({"_id": _byid(id)}, {"$set":  data})

acc_data = {
    "contact_name": "Mr. X",
    "company_name": "Awesome Inc.",
}

account = Account()

# INSERT
_id = account.insert(acc_data)
print 'ID:', _id

# RETRIVE
for ac in account.byid(_id):    
    print ac["company_name"]

# UPDATE
acc_data["company_name"] = acc_data["company_name"][::-1].upper()
print account.update(_id, acc_data)

# RETRIVE AGAIN
for ac in account.byid(_id):    
    print ac["company_name"]

1 Ответ

4 голосов
/ 30 января 2012

Понял. Обновление должно быть:

def update(self, id, data):
    return self.collection.update({"_id": _byid(id)}, data)       

Не нужно "$set"

...