MongoDB pymongo update()只是创建一个新记录而不是更新

时间:2012-10-02 21:12:55

标签: mongodb pymongo

创建新文档

>>>Categories.insert({'test':'test'})
ObjectId('506b563df49a007f73000001')

是的,创建好了。

>>> Categories.find_one({'test':'test'})
{u'test': u'test', u'_id': ObjectId('506b4149f49a007cd0000000')}

给它一个新属性'newAttr',其值为'hello'

>>> Categories.update({'_id':Categories.find_one({'test':'test'})['_id']},{'newAttr':'hello'})

查找相同的文档

>>> Categories.find_one({'test':'test'})
{u'test': u'test', u'_id': ObjectId('506b563df49a007f73000001')}

尚未更新??

搜索包含新属性的内容:

>>> Categories.find_one({'newAttr':'hello'})
{u'newAttr': u'hello', u'_id': ObjectId('506b4149f49a007cd0000000')}

它创建了一个单独的文档,而不是更新前一个文档?

知道如何纠正这个问题吗?

1 个答案:

答案 0 :(得分:3)

我在设置新字段时得到的结果不一样,但我使用的是这种语法:

cat.update({'_id':cat.find_one({'test':'test'})['_id']},{'$set':{'newattr':'hello'}})

请参阅here了解$ set说明。

>>> cat.find_one({'test':'test'})
{u'newattr': u'hello', u'test': u'test', u'_id': ObjectId('506b5d07594bc07d90000000')}