2015-08-24 117 views
0

我想用pymongo(版本3.0.3)通過其ID來更新現有的mongodb文檔。然而沒有更新與我的Python代碼。有誰知道爲什麼..?使用Pymongo更新Mongo文檔

這是我想運行的mongodb腳本,這可以從mongo客戶端Robomongo正常工作。

db.mycollection.update(
    { '_id': ObjectId("55d49338b9796c337c894df3") }, 
    { $set: { "details.model": "14Q22" } }, 
    upsert=false 
) 

但是這個python代碼不起作用。

client = pymongo.MongoClient("1.1.1.1", 27017) 
db = client.mydb 

db.mycollection.update(
    { '_id': "55d49338b9796c337c894df3" }, 
    { '$set': { "details.model": "14Q22" } }, 
    upsert=False 
) 

它返回

{u'n': 0, u'nModified': 0, u'ok': 1, 'updatedExisting': False} 
+0

也許你可以試試update_one? http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.update_one – sihrc

+0

即使此ID已存在,update_one也會添加一個新文檔。而第一個mongo腳本正確添加了details.model。我需要以不同的方式指定mongodb ID嗎? –

+0

'client [「mydb」] [「mycollection」]。update({'_id':「55d49338b9796c337c894df3」}, {'$ set':{「details.model」:「14Q22」}}, upsert = False )' – dsgdfg

回答

2

是的,你得按如下方式指定的ObjectId實例:

from bson.objectid import ObjectId 
db.mycollection.update({ '_id': ObjectId("55d49338b9796c337c894df3"), {'$set': { "details.model": "14Q22" } }) 
  • 還注意到mycollection.update althought它的作品已被棄用 由於引入新的CRUD操作,更好地使用 mycollection.update_one或mycollection.fin d_one_and_update
+0

啊,這是我的猜測,但不知道該怎麼做。同時感謝您的棄用反饋。非常感謝! –

+0

@ ek-ok歡迎您:-) 也......可能你有ObjectId作爲插入或查找操作返回,在這種情況下,你不必實例化一個新的。 – nickmilon

+0

明白了。非常感謝! –