Вставить объект python в mongodb

Люди, я просто потратил много времени, пытаясь понять это – я должен упустить что-то основное.

У меня есть объект python, все, что я хочу сделать, это вставить этот объект в mondodb.

Это то, что у меня есть:

from pymongo import Connection import json conn = Connection() db = conn.cl_database postings = db.postings_collection class Posting(object): def __init__(self, link, found=None, expired=None): self.link = link self.found = found self.expired = expired posting = Posting('objectlink1') value = json.dumps(posting, default=lambda x:x.__dict__) postings.insert(value) 

выдает эту ошибку:

 Traceback (most recent call last): File "./mongotry.py", line 21, in <module> postings.insert(value) File "build/bdist.macosx-10.7-intel/egg/pymongo/collection.py", line 302, in insert File "build/bdist.macosx-10.7-intel/egg/pymongo/database.py", line 252, in _fix_incoming File "build/bdist.macosx-10.7-intel/egg/pymongo/son_manipulator.py", line 73, in transform_incoming TypeError: 'str' object does not support item assignment 

Похоже, это потому, что json.dumps () возвращает строку.

Теперь, если я действительно выполняю нагрузку значения, прежде чем вставлять его, он отлично работает:

 posting = Posting('objectlink1') value = json.dumps(posting, default=lambda x:x.__dict__) value = json.loads(value) postings.insert(value) 

Что наиболее прямолинейно для этого?

Благодаря!

2 Solutions collect form web for “Вставить объект python в mongodb”

Какова value исходного кода?

Это должен быть не экземпляр класса dict

Это должно работать:

 postings.insert(posting.__dict__) 

Вы неправильно используете метод вставки для коллекции. Просмотрите здесь: http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert

То, что вам нужно вставить, – это документ. Это должен быть ключ с ключами и значениями. Просто попытка вставить строку не подходит. json.dumps возвращает строку в формате json. Если вы просто сбрасываете его, чтобы получить dict, то шаг json не нужен.

Вставьте именно то, как должны выглядеть ваши документы:

postings.insert ({ "ключ": "значение"})

Или конвертируйте экземпляр класса непосредственно в dict, который хотите сохранить в качестве документа, а затем вставьте его. Он работает с вашим json.dumps.loads (), потому что это в конечном итоге дает вам диктовку.

  • Настройка конфигурации авторизации MongoDB в Python-Eve
  • MongoDB: не может инициировать набор реплик; 'уже имеет данные, не может инициировать набор'
  • Метод PyMongo и toArray ()
  • Используя MongoDB в качестве нашей основной базы данных, следует ли использовать отдельную базу данных графа для реализации отношений между объектами?
  • Как обновить значения с помощью pymongo?
  • Как ограничить запрос mongo в python
  • Флаг Upsert и Multi в пимонго
  • MongoDB: как получить db.stats () из API
  • Получите все документы коллекции, используя Pymongo
  • Получить обязательные поля из документа в mongoengine?
  • Получить идентификатор объекта документа уже в коллекции mongoDB в Python
  • Python - лучший язык программирования в мире.