Заполните базу данных Mongo Json-файлом в скрипте Python из командной строки - PullRequest
0 голосов
/ 08 февраля 2019
page = open("npm.json", "r")
parsed = json.loads(page.read())

for i in parsed["dependencies"]:
    collection.insert_one(i)

Привет, я пытаюсь прочитать файл json и заполнить мой mongoDB строками с именем ependencies.it продолжает выдавать мне сообщение об ошибке.Я пытался вставить, 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 в проекте узла.Кто-нибудь может помочь Спасибо заранее

1 Ответ

0 голосов
/ 08 февраля 2019

Похоже, ваши данные в 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 или bson, которые похожи на словари.Когда вы передаете keys, вы пытаетесь вставить объекты типа string, которые он не поддерживает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...