python - 从命令行使用 Python 脚本中的 Json 文件填充 Mongo 数据库
问题描述
page = open("npm.json", "r")
parsed = json.loads(page.read())
for i in parsed["dependencies"]:
collection.insert_one(i)
嗨,我正在尝试读取一个 json 文件并用名为 ependencies 的行填充我的 mongoDB。它一直给我和错误。我试过 insert, insert_one &insert_many 无济于事。
以下是我得到的错误
File "database.py", line 43, in <module>
collection.insert_one(i)
File "/usr/local/lib/python3.6/dist-packages/pymongo/collection.py", line 684, in insert_one
common.validate_is_document_type("document", document)
File "/usr/local/lib/python3.6/dist-packages/pymongo/common.py", line 453, in validate_is_document_type
"collections.MutableMapping" % (option,))
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
from apport.packaging_impl import impl as packaging
File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Original exception was:
Traceback (most recent call last):
File "database.py", line 43, in <module>
collection.insert_one(i)
File "/usr/local/lib/python3.6/dist-packages/pymongo/collection.py", line 684, in insert_one
common.validate_is_document_type("document", document)
File "/usr/local/lib/python3.6/dist-packages/pymongo/common.py", line 453, in validate_is_document_type
"collections.MutableMapping" % (option,))
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping
json 文件是节点依赖项的列表。我在节点项目上运行命令 npm list 。任何人都可以帮助提前谢谢
解决方案
看起来您的数据dependencies
是一个dictionary
. 这意味着当你迭代它时,你会得到字符串(在这种情况下是键)。
一个例子是这样的:
my_entry = {'a': 1, 'b': 2}
for i in myentry:
print(i)
# will print 'a' then 'b', not 1 then 2
我假设每个依赖项都是一个键,并且您想要插入该值。所以
# dictionary.values() will give you just the values
for v in parsed['dependencies'].values():
if isinstance(v, dict):
collection.insert_one(v)
else:
raise ValueError("object is not dictionary")
Mongo 只会取json
orbson
条目,就像字典一样。当你通过时keys
,你试图插入string
它不支持的类型的对象
推荐阅读
- tfs - SonarQube 7.1 和 TFS 2018 发布质量门结果失败
- c# - 无论开始时间如何,将任务安排在每小时的第 35 分钟
- python - 使用 OpenCV 进行人脸识别中的背景对象检测
- spring - 如何针对接口中的注释参数编写测试?
- aws-lambda - AWS AppSync 在解析子资源之前等待 DynamoDB Streams Lambda 函数
- amazon-web-services - 具有上下文标识的 aws lambda 测试
- django - 如何在 Django 视图中注册期间输入电子邮件数据
- python-3.x - 根据日期时间索引中的条件删除数据框行
- tfs - 有没有办法为 TFS 或 VSTS 中的代理池保留管道?
- python - 将图层与输入相结合