2012-04-24 4 views
5

여러분, 방금 ​​이것을 보려고 많은 시간을 보냈습니다. 나는 기본적인 것을 놓치고 있습니다.mongodb에 파이썬 개체를 삽입하십시오.

나는 파이썬 객체를 가지고 있는데,이 객체를 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) 

이 오류가 발생합니다 :

이 내가 가진 무엇 json.dumps은() 문자열을 반환하기 때문에이처럼

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 

보인다. 내가 삽입하기 전에 값의 부하를 할 경우

지금 그것을 잘 작동합니다 :

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

이 작업을 수행하는 가장 직선 앞으로 무엇입니까?

감사합니다.

답변

10

초기 코드에 value은 무엇입니까?

이 작동합니다 dict하지 클래스 인스턴스가 있어야한다 :

postings.insert(posting.__dict__) 
+1

죄송합니다. 미안하지만, 내가 그 라인을 놓친 것을 알았습니다. 질문을 편집했습니다. – helpmelearn

+0

하지만'Posting' 클래스 사용의 요지는 무엇입니까? – San4ez

+0

이런, 맞아. 고마워, 바보 같은 짓을 하다니 – helpmelearn

2

당신은 모음의 삽입 방법을 오용하고 있습니다. 여기에서 검토하십시오 : http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.insert

삽입해야하는 것은 문서입니다. 키와 값이있는 dict이어야합니다. 단순히 문자열 삽입을 시도하는 것은 적절하지 않습니다. json.dumps는 json 형식의 문자열을 반환합니다. 당신이 방금 dict을 얻기 위해 그것을 털어 내고 있다면, json 단계는 필요하지 않습니다.

삽입 정확하게 문서를 보는 방법 :

postings.insert ({ "키": "값"})

을 또는 당신이 문서로 저장할 DICT에 직접 클래스 인스턴스로 변환 삽입하십시오. 그것은 결국 json.dumps.loads()와 함께 작동합니다. 왜냐하면 그것이 궁극적으로 당신에게 딕트 (dict)를주기 때문입니다.

관련 문제