デフォルトではcollection.find
またはcollection.findone()
の関数は辞書型になり、パラメータの型をas_class=SomeUserClass
に渡すと、結果をこのクラス形式に解析しようとします。 でも、このクラスは辞書の派生クラスである必要があります(__setitem__
関数が定義され、クラスにキーを追加する必要があります)。 ここではクラスのプロパティを設定します。どのように私はこれを達成することができますか? また、私のコレクションクラスには、いくつかの子クラスがプロパティとして含まれています。どのようにして子クラスのプロパティも設定できます。PYMongo:構文解析|コレクションのクエリ出力をシリアライズ
0
A
答えて
0
私はクラスで__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
0
オブジェクトリレーショナルマッパーのようなものがほしいと思うようです。私はMingという1人の主著者ですが、Pythonの他にもいくつか存在しています。明では、あなたのマッピングを設定するには、次の行う可能性があります:
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()
次にあなたが経由して、いくつかの特定のページを照会することができます:私はPythonでMongoDBのための知っている様々なODM企業が記載されています
pg = WikiPage.query.get(title='MyPage')
pg.comments # loads comments via a second query from MongoDB
以下。
関連する問題
- 1. Vala - 構文解析
のように、私はまた、あなたは明のバリデータでフィールドの種類を設定することができることを言及する必要がありますですあなたはカスタムming.schema.SchemaItemを書くことでこれを行うことができます。 –