使用搜索样式更新在MongoDB中更新文档时,是否可以取回更新文档的_id?
例如:
import pymongo
client = pymongo.MongoClient('localhost', 27017)
db = client.test_database
col = db.test_col
col.insert({'name':'kevin', 'status':'new'})
col.insert({'name':'brian', 'status':'new'})
col.insert({'name':'matt', 'status':'new'})
col.insert({'name':'stephen', 'status':'new'})
info = col.update({'status':'new'}, {'$set':{'status':'in_progress'}}, multi=False)
print info
# {u'updatedExisting': True, u'connectionId': 1380, u'ok': 1.0, u'err': None, u'n': 1}
# I want to know the _id of the document that was updated.
我有多个线程访问数据库集合,并希望能够将文档标记为正在执行操作。首先获取文档然后通过Id进行更新并不是一个好的答案,因为两个线程可能会得到" get"更新前的同一文件。该应用程序是一个简单的异步任务队列(是的,我知道我们最好使用像Rabbit或ZeroMQ这样的东西,但现在添加到我们的堆栈是不可能的)。
答案 0 :(得分:4)
您可以使用pymongo.collection.find_and_modify
。它是MongoDB findAndModify命令的包装器,可以返回原始(默认)或修改过的文档。
info = col.find_and_modify({'status':'new'}, {'$set':{'status':'in_progress'}})
if info:
print info.get('_id')