質問

デフォルトで collection.find また collection.findone() 関数は辞書タイプになり、パラメーターを渡す場合 as_class=SomeUserClass 結果をこのクラス形式に解析しようとするよりも。しかし、このクラスは辞書のクラスも導き出されるべきです(必要に応じて __setitem__ 定義する機能とクラスにキーを追加できます)。ここでクラスのプロパティを設定したいと思います。どうすればこれを達成できますか?また、私のコレクションクラスには、一部の子クラスがプロパティとして含まれています。したがって、子どものクラスのプロパティを設定するにはどうすればよいですか。

役に立ちましたか?

解決 2

追加することでこれを解決しました __setitem__ クラスで。私よりも

result = as_class()
for key,value in dict_expr.items():
        result.__setitem__(key,value)

そして私のクラスで __setitem__ のようなものです

def __setitem__(self,key,value):
     try:
        attr = getattr(class_obj,key)
        if(attr!=None):
            if(isinstance(value,dict)):
                for child_key,child_value in value.items(): 
                    attr.__setitem__(child_key,child_value)
                setattr(class_obj,key,attr)
            else:
                setattr(class_obj,key,value)

    except AttributeError:
       pass

他のヒント

オブジェクト関係のマッパーのようなものが欲しいようです。私は1つの主要な著者です 、しかし、Pythonには他にもいくつかあります。 Mingでは、マッピングをセットアップするために次のことを行う場合があります。

from ming import schema, Field
from ming.orm import (mapper, Mapper, RelationProperty, 
    ForeignIdProperty)

WikiDoc = collection(‘wiki_page', session,
    Field('_id', schema.ObjectId()),
    Field('title', str, index=True),
    Field('text', str))
CommentDoc = collection(‘comment', session,
    Field('_id', schema.ObjectId()),
    Field('page_id', schema.ObjectId(), index=True),
    Field('text', str))

class WikiPage(object): pass
class Comment(object): pass

ormsession.mapper(WikiPage, WikiDoc, properties=dict(
    comments=RelationProperty('WikiComment')))
ormsession.mapper(Comment, CommentDoc, properties=dict(
    page_id=ForeignIdProperty('WikiPage'),
    page=RelationProperty('WikiPage')))

Mapper.compile_all()

次に、次の特定のページをクエリすることができます。

pg = WikiPage.query.get(title='MyPage')
pg.comments # loads comments via a second query from MongoDB

PythonのMongodbについて私が知っているさまざまなODMを以下にリストします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top