2012-04-24 12 views
5

フォーク、 これを見てみるとかなりの時間を費やしました。基本的なものが欠けているはずです。mongodbにpythonオブジェクトを挿入してください

私は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) 

は、このエラーがスローされます:

これは私が持っているものである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

あなたが挿入する必要があるものはドキュメントです。これは、キーと値を使った辞書でなければなりません。単に文字列を挿入しようとするのは適切ではありません。 json.dumpsはjson形式の文字列を返します。あなたがdictを取得するためにそれをダンプするのであれば、jsonのステップは必要ありません。

挿入し、正確にあなたの文書がどのように見えるべきか:

postings.insert({「キー」:「値」})

をそれとも、ドキュメントとして保存したい辞書に直接あなたのクラスのインスタンスを変換しますそれを挿入します。これはjson.dumps.loads()で動作します。なぜなら、最終的にはあなたにdictを与えるからです。

関連する問題