2015-08-24 57 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

明白了。非常感谢! –