В моем скрипте я пытаюсь вставить один документ, используя pymongo из скрипта. Документ также содержит массив или внедренные документы. При запуске этого кода в клиенте Mongo напрямую он работает. Из скрипта его нет.
Я использую MongoDB 4.08 с pymongo 3.8.0 и пробовал оба на python 2.7.10 и 3.7.3.
Вот документ, который я хотел бы вставить:
{'id': 84646995, 'first': 'AAA', 'last': 'YYY', 'email': 'AAA.YYY@domain.com', 'previous_cars': [{'make': 'BMW', 'model': 'model2'},{'make': 'Mercedes', 'model': 'model1'}]}
Цель сценария - создать тестовые данные по одному документу за раз и впоследствии вставить их в пользователя коллекции.
import pymongo
import random
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client.user # db user with a collection called user
first_names = ["AAA", "BBB", "CCC"]
last_names = ["XXX", "YYY", "ZZZ"]
make_list = ["Audi", "BMW", "Mercedes"]
model_list = ["model1", "model2", "model3"]
total = 0
for x in range(10):
u_id = random.randint(10000000, 99999999)
first = random.choice(first_names)
last = random.choice(last_names)
make1 = random.choice(make_list)
make2 = random.choice(make_list)
model1 = random.choice(model_list)
model2 = random.choice(model_list)
doc = "{'id': " + str(u_id) + ", 'first': '" + str(first) + "', 'last': '" + str(last) + "', 'email': '" + str(first) + "." + str(last) + "@firma.de', 'previous_cars': [{'make': '" + str(make1) + "', 'model': '" + str(model1) + "'},{'make': '" + str(make2) + "', 'model': '" + str(model2) + "'}]}"
print(doc)
db.user.insert_one(doc)
total += 1
print("Done. Inserted " + str(total) + " documents.")
Я получаю ошибку:
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping
Если я возьму вывод print(doc)
и вставлю его в оболочку Python (с открытым соединением pymongo), я не получу ошибку. Ваша помощь очень ценится.