无法更新 mongoDB 文档

Posted

技术标签:

【中文标题】无法更新 mongoDB 文档【英文标题】:Cant get mongoDB document to update 【发布时间】: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)

【问题讨论】:

删除条件中的类型转换,然后如果您仍然有困难,请发布您正在使用的文档和条件。 【参考方案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"] 的语法简写,所以它不支持使用变量集合名称。

以上是关于无法更新 mongoDB 文档的主要内容,如果未能解决你的问题,请参考以下文章

无法即时更新 mongodb 文档

无法使用 mongoose 更新 Mlab 文档的值,它被保存为“__v”:0

Mongodb怎样更新像这样的文档,数组里面有子文档

通过在 body、mongoose/mongodb 中提供文档来更新多个文档

MongoDB - 无法将时间戳字段添加到数组中的子文档

找不到 id 并更新和增加子文档 - 返回 null Mongoose/mongoDB