在mongodb中插入python对象

Posted

技术标签:

【中文标题】在mongodb中插入python对象【英文标题】:Insert python object in mongodb 【发布时间】:2012-05-04 18:18:05 【问题描述】:

各位, 我只是花了很多时间试图查找这个——我应该遗漏一些基本的东西。

我有一个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)

最直接的做法是什么?

谢谢!

【问题讨论】:

【参考方案1】:

您的初始代码中的value 是什么?

应该是dict 而不是类实例

这应该可行:

postings.insert(posting.__dict__)

【讨论】:

对不起,我意识到我错过了一行,刚刚编辑了问题。 天哪,没错。谢谢,错过了这么愚蠢的事情感到很愚蠢。【参考方案2】:

您误用了集合的插入方法。在这里评论:http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert

您需要插入的是一个文档。它应该是一个带有键和值的字典。简单地尝试插入字符串是不合适的。 json.dumps 返回一个 json 格式的字符串。如果您只是将其转储以获取 dict,则不需要 json 步骤。

准确插入文档的外观:

postings.insert("key":"value")

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

【讨论】:

如何在这个问题中插入嵌套字典的外层?***.com/questions/59499237/…

以上是关于在mongodb中插入python对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose、mocha 和 chai 编写用于向 mongodb 插入和检索对象的单元测试?

python 与 mongodb的交互--更新操作

Mongodb 请求处理流程

Python操作MongoDB

mongodb常用操作

Python下MongoDB的简单应用