from pymongo import MongoClient
#Step 1: Connect to MongoDB - Note: Change connection string as needed
client = MongoClient(port=27017)
db=client.cltest
#Step 2: Create sample data
names = ['Kitchen','Animal','State', 'Tasty']
company_type = ['LLC','Inc','Company','Corporation']
company_cuisine = ['Pizza', 'Bar Food', 'Fast Food', 'Italian']
# Change Names List into Dictionary Format to Insert into MongoDB
namesdict = {}
namesrange = len(names)
for x in range(0, namesrange):
if names[x] in namesdict:
continue
else:
namesdict['names'] = names[x]
#Step 3: Insert namesdict object directly into MongoDB via insert_one
result=db.reviews1.insert_many(namesdict)
#Step 4: Print to the console the ObjectID of the new document
print('Created {0}'.format(result.inserted_id))
TypeError: документ должен быть экземпляром dict, bson.son.SON, bson.raw_bson.RawBSONDocument или типом, который наследуется от collection.MutableMapping
Я новичок в Pymongo и Python, поэтому я не уверен, возможно ли это.
Моя цель - взять словарь с несколькими различными значениями, которые были скомпилированы из списка, и вставить эти значения в MongoDB, используя объект словаря namesdict. Я знаю, что мог бы вручную выписать каждое значение словаря и вставить их, но искал более эффективный способ. Я надеялся, что может быть способ вставить много сразу из объекта массива.
Структура базы данных выглядит примерно так:
cltest (DB)
reviews1 (Документ)
Поля (_id ObjectId, имена)
Колонка (имена)
Кухня (Стоимость)
Животное (Значение)
Состояние (значение)
Вкусный (Значение)
Обновление 1
dic1 = {'website': 'www.carrefax.com'}, {'website': 'Daniel Hoadley'}, {'website': 'purple'}
for item in dic1:
collection.insert_one(item)
Приведенный выше код позволяет мне вводить несколько записей в БД. Я по-прежнему сталкиваюсь с проблемами при преобразовании списка (имен) в словарь, такой как dic1, где все ключи одинаковы.
Обновление 2 - найденное решение для единого списка для ввода значений массового импорта в MongoDB
Обновление 3
Сейчас я пытаюсь взять все три списка, преобразовать их в словари. Затем вставьте данные из всех других списков в каждый элемент имени, чтобы порядок имени соответствовал первому типу компании, который также соответствует первому элементу кухни компании и т. Д.
Обновлен код:
from pymongo import MongoClient
# Create connection to MongoDB
client = MongoClient('localhost', 27017)
db = client['name_of_database']
collection = db['name_of_collection']
names = ['Kitchen','Animal','State', 'Tasty']
company_type = ['LLC','Inc','Company','Corporation']
company_cuisine = ['Pizza', 'Bar Food', 'Fast Food', 'Italian']
# Build a basic dictionary & Insert into DB
for item in names:
data = {}
data['name'] = item
collection.insert_one(data)
for item in company_type:
data = {}
data['company_type'] = item
collection.insert_one(data)
for item in company_cuisine:
data = {}
data['cuisine'] = item
collection.insert_one(data)
Обновление 4 - решено
from pymongo import MongoClient
# Create connection to MongoDB
client = MongoClient('localhost', 27017)
db = client['name_of_database']
collection = db['name_of_collection']
names = ['Kitchen','Animal','State', 'Tasty']
company_type = ['LLC','Inc','Company','Corporation']
company_cuisine = ['Pizza', 'Bar Food', 'Fast Food', 'Italian']
# Build a basic dictionary & Insert into DB
for i, c, p in zip(names, company_type, company_cuisine):
data = {}
data['name'] = i
data['company_type'] = c
data['cuisine'] = p
collection.insert_one(data)