【问题标题】:Cant get mongoDB document to update无法更新 mongoDB 文档
【发布时间】:2020-09-26 16:16:56
【问题描述】:

Pymongo,Python3。真是绞尽脑汁。试过update_one()find_one()update()。尝试使用 mongo id "_id" 以及我在每个文档中设置的已知 ID。文档中没有任何更新。谁能告诉我我哪里出错了? 最后一次尝试见下文。想要遍历所有集合和每个集合中的所有文档并更新特定字段。

使用update_one()ID 我知道文档中存在:

for collection in collectionNames:
    for doc in movie_db[str(collection)].find():
        new_path = get_updated_poster()
        new_path_url = base_url + new_path
        result = movie_db.collection.update_one({'id':int(ID)},{'$set':{'poster_path':new_path_url}})

使用 find_one_and_update(),甚至尝试复制“_id”也无济于事(注意我这里还添加了“from bson.objectid import ObjectId”:

for collection in collectionNames:
    for doc in movie_db[str(collection)].find():
        new_path = get_updated_poster()
        new_path_url = base_url + new_path
        result = movie_db.collection.update_one(
                     {"_id":ObjectId(id)}, 
                     {"$set": {
                         "poster_path": new_path
                     }
                     }, upsert=False)

【问题讨论】:

  • 删除条件中的类型转换,然后如果您仍然有困难,请发布您正在使用的文档和条件。

标签: python mongodb pymongo


【解决方案1】:

movie_db.collection.update_one 通常表示更新集合中名为“collection”的一个文档。

您似乎使用collection 来保存您的收藏的名称,因此您可能需要使用movie_db[str(collection)].update_one

【讨论】:

  • 太棒了!谢谢。你能解释一下为什么这有效吗?我确实在变量“集合”中保存了集合的名称。是因为我使用了我需要使用 db[variableName] 版本而不是 db.variableName 的变量吗?
  • 没错,db.collection 有点像db.getCollection("collection")db["collection"] 的语法简写,所以它不支持使用变量集合名称。
猜你喜欢
  • 2015-02-21
  • 2016-01-07
  • 2017-06-21
  • 2021-12-25
  • 1970-01-01
  • 2019-09-13
  • 2011-08-04
  • 1970-01-01
相关资源
最近更新 更多