python - Python Mongodb update_one() 不会更新数据库
问题描述
我有一个带有文档的MongoDB。其中一些有可下载音频的链接。它看起来基本上是这样的:
"_id" : ObjectId("5ece21d39dfe015b29ec4812"),
"date" : "some date",
"path" : "path/to/raw/file",
"has_audio" : true,
"audio_downloaded" : false,
"audio_link" : "some link",
"audio_file" : "None",
我的脚本应该检查“has_audio”是否为真,“audio_downloaded”是否为假。这很好用。之后它会下载文件,完成后它应该会在 Mongodb 中输入:
audio_downloaded:是的,
音频文件:“路径/到/audiofile.mp3”
这对我不起作用,它不会更新。这是我的代码和我尝试过的:
import os
import urllib.request
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
database = client["DW"]
col = database["document"]
for entry in col.find({"has_audio": {"$eq": True}, "audio_downloaded": {"$ne": True}}):
audio_link = entry['audio_link']
file_path = entry['path']
file_path = os.path.dirname(file_path) + "/"
audio_file_name = os.path.basename(audio_link)
audio_file_path = file_path + audio_file_name
urllib.request.urlretrieve(audio_link, audio_file_path)
col.update_one({'audio_downloaded': entry['audio_downloaded']}, {'$set': {'audio_downloaded': True}})
col.update_one({'audio_file': entry['audio_file']}, {"$set": {"audio_file": audio_file_path}})
解决方案
您语句上的过滤器update_one()
将更新由数据库决定的第一条匹配记录,与记录无关entry
。
用以下内容替换最后两行,这将匹配唯一_id
字段:
col.update_one({'_id': entry.get('_id')}, {'$set': {'audio_downloaded': True, "audio_file": audio_file_path}})
推荐阅读
- azure-data-explorer - 如何访问 kusto 表中特定行号和特定列号的值?
- mysql - MySQL 别名在 CASE 语句的 ELSE 部分失败(错误代码:1054。“字段列表”中的未知列“xxx”)
- python - 我可以在不创建新列表/数组的情况下展平数组吗?
- firebase - 如何在 swiftUI 和 firestore 中创建愿望清单功能
- verilog - verilog中的posedge只能在时钟上使用吗?
- media-queries - Google Apps 脚本是否支持媒体查询?
- c# - 为 foreach 获取 ObjectModel.ReadOnlyCollection
- git - git - 显示更改文件的文件名和文件大小?
- python-2.7 - Tkinter 删除放置在画布上的框架在一个画布上工作,但在另一个画布上无效
- react-native - 仅从 DateTimePickerModal 中提取月份和年份反应原生