2012-10-02 37 views
1

創建一個新文檔MongoDB的pymongo update()方法簡單地創建了一個新的記錄,而不是更新

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

沒錯,創建確定。

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

給它價值 '你好'

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

一個新的屬性 'newAttr' 查找同一文檔

>>> 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

如果您想添加一個需要使用的新字段{$ set:{'field':'name'}) - 您擁有的方式是告訴它將文檔更新爲整體新的價值... –

+0

是的,這是有效的! – LittleBobbyTables

回答

3

我不要設定一個新的領域,當你得到相同的,但我使用這個語法:

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

here爲$設置說明。

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