回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>pymongo <a href="http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.update" rel="nofollow">documentation</a>上写着:</p>
<blockquote>
<p>By default an acknowledgment is requested from the server that the
update was successful, raising <code>OperationFailure</code> if an error occurred.</p>
</blockquote>
<p>我将pymongo2.7.1与python2.7.5一起使用。以下操作返回<code>None</code>,无论操作是否成功:</p>
<pre><code>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}})
</code></pre>
<p>在第二个语句中,我试图提取一个在<code>friend_list</code>中不存在的东西。在</p>
<p><code>remove</code>也会发生这种情况。它还返回None,无论操作成功与否,即如果删除了文档:</p>
^{pr2}$
<p>我通过了<code>w=1</code>并收到以下响应:</p>
<blockquote>
<p>{u'ok': 1.0, u'err': None, u'connectionId': 12037, u'n': 1,
u'updatedExisting': True, u'lastOp': Timestamp(1403099751, 1)}</p>
</blockquote>
<p>当我手动检查数据库时,我看到它从<code>friend_list</code>中提取了名称。现在,如果我再次运行相同的程序,即尝试提取<code>friend_list</code>中不存在的名称:</p>
<blockquote>
<p>{u'ok': 1.0, u'err': None, u'connectionId': 12037, u'n': 1,
u'updatedExisting': True, u'lastOp': Timestamp(1403099873, 1)}</p>
</blockquote>
<p>和以前一样。在</p>
<p>那么我如何知道更新和删除操作是否成功呢?在</p>
<p><strong>编辑</strong>:正如答案指出的,我使用的是connection而不是MongoClient。现在我已经更新,<code>remove</code>正在工作。但是<code>update</code>工作不正常:</p>
<pre><code>>>> 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)}
>>>
</code></pre>
<p>最后一条语句试图从列表中删除项,即使该项已不存在于列表中。在</p>