在mongodb中插入python对象

时间:2012-04-24 05:48:14

标签: python json 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 个答案:

答案 0 :(得分:11)

初始代码中的value是什么?

它应该是dict而不是类实例

这应该有效:

postings.insert(posting.__dict__)

答案 1 :(得分:2)

您正在滥用集合的insert方法。点击此处:http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert

您需要插入的是一份文件。它应该是一个带键和值的字典。简单地尝试插入字符串是不合适的。 json.dumps以json格式返回一个字符串。如果你只是倾倒它来获得一个字典,那么json步骤就没有必要了。

准确插入文档的外观:

postings.insert({ “键”: “值”})

或者将您的类实例直接转换为您要存储为文档的dict,然后插入它。它适用于你的json.dumps.loads(),因为它最终会给你一个字典。