Как вставить несколько значений словаря с объектом с помощью PyMongo - PullRequest
0 голосов
/ 03 ноября 2018
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)
...