的pymongo documentation說:Pymongo返回沒有成功更新後/刪除操作
默認情況下,從該 更新成功,提高
OperationFailure
如果發生錯誤的服務器請求的確認。
我在Python 2.7.5中使用Pymongo 2.7.1。繼操作返回None
,該操作是否成功與否:
user_db.update({'email_id': user_email}, {'$pull': {'friend_list': existing_friend}})
user_db.update({'email_id': user_email}, {'$pull': {'friend_list': non_existing_friend}})
在第二份聲明,我試圖拉一些東西,不存在friend_list
。
也與remove
相同。它也返回None,是操作成功或不成功即,如果它刪除文件或不:
user_db.remove({'name': 'john'}
我通過w=1
,我收到如下回應:
{u'ok':1.0 ,u'err ':無,u'connectionId':12037,u'n ':1, u'updatedExisting':真,u'lastOp':時間戳(1403099751,1)}
當我手動檢查數據庫,我發現它已從friend_list
中拉出名稱。現在,如果我同再次運行IE瀏覽器試圖拉它不存在friend_list
一個名字:
{u'ok ':1.0,u'err':無,u'connectionId「:12037,u'n ':1, u'updatedExisting':真,u'lastOp':時間戳(1403099873,1)}
它是一樣早。
那麼如何知道更新和刪除操作是否成功?
編輯:正如答案指出的,我使用的是連接而不是MongoClient。現在我已更新,remove
正在工作。然而update
工作不正常:
>>> conn = pymongo.MongoClient(MONGOHQ_URL)
>>> db = conn['test']
>>> test_collection = db.test
>>>
>>> test_collection.insert({'name': 'john'})
ObjectId('53a25612a760360253920619')
>>>
>>> test_collection.update({'name': 'john'}, {'$addToSet': {'friends': 'merry'}})
{u'ok': 1.0, u'err': None, u'connectionId': 12317, u'n': 1, u'updatedExisting': True, u'lastOp': Timestamp(1403147936, 1)}
>>>
>>> test_collection.update({'name': 'john'}, {'$pull': {'friends': 'merry'}})
{u'ok': 1.0, u'err': None, u'connectionId': 12317, u'n': 1, u'updatedExisting': True, u'lastOp': Timestamp(1403147959, 1)}
>>>
>>> test_collection.update({'name': 'john'}, {'$pull': {'friends': 'merry'}})
{u'ok': 1.0, u'err': None, u'connectionId': 12317, u'n': 1, u'updatedExisting': True, u'lastOp': Timestamp(1403147963, 1)}
>>>
最後一條語句試圖從列表中刪除項目,即使該項目不再在列表中存在。
是Pymongo或我的代碼中的錯誤是錯誤的嗎? – avi
@avi更新了我的答案 –
我已經更新了這個問題。如果你在同一個文件上做另一個'pull',那麼響應是一樣的。 – avi