我想perfom有關MongoDB更新,使用電機和tornadoweb用下面的代碼:更新的MongoDB
@gen.coroutine
def set_project_status(self, pid, status):
try:
project = yield motor.Op(self.db[S.DB_PROJECT_TABLE].find_one, {'PID': pid})
logging.debug('set_project_status old_id {0}'.format(project['_id']))
project_update = yield motor.Op(self.db[S.DB_PROJECT_TABLE].update,
{'_id': ObjectId(project['_id'])}, {'STATUS': status})
logging.debug('set_project_status saving')
save = yield motor.Op(self.db[S.DB_PROJECT_TABLE].save, project_update)
logging.debug('set_project_status saved {0}'.format(save))
logging.debug('set_project_status saved id {0}'.format(project_update))
project = yield motor.Op(self.db[S.DB_PROJECT_TABLE].find_one, {'PID': pid})
logging.debug('set_project_status project {0}'.format(project))
raise gen.Return(True)
except Exception,e:
logging.debug('{0} {1} {2}'.format(pid, status, e))
raise gen.Return(False)
我得到的日誌是:
set_project_status old_id 52d532d4b12c6478ce767a83
set_project_status saving
set_project_status saved 52d532d4b12c6478ce767a84
set_project_status saved id {u'ok': 1.0, u'err': None, u'connectionId': 2052, u'n': 1, u'updatedExisting': True, '_id': ObjectId('52d532d4b12c6478ce767a84')}
set_project_status project None
我得到了一些中間對象(u'updatedExisting?),之後沒有。
我看起來像我應該做一些'commit'or所以。有任何想法嗎?
迎接!
感謝您的全面的答案。閱讀文檔總是被遺忘的優勢。在代碼中指出更改後,功能正常工作。由於調試原因,原始函數奇怪地很長。 2. Yeap,我確保在這個集合的PID上有一個唯一的索引。 3.謝謝。 – user1632928