Pymongo: Parsen | Serialisierende Abfrageausgabe einer Sammlung
Frage
Standardmäßig collection.find
oder collection.findone()
Funktionen führen zu einem Wörterbuchtyp und wenn Sie Paramater übergeben as_class=SomeUserClass
als versucht es, das Ergebnis in dieses Klassenformat zu analysieren. Aber es scheint, dass diese Klasse auch abgeleitete Klasse von Wörterbuchstaben sein sollte (wie es erforderlich ist __setitem__
Funktion zu definiert werden und ich kann Schlüssel in der Klasse hinzufügen). Hier möchte ich die Eigenschaften der Klasse festlegen. Wie kann ich das erreichen? Außerdem enthält meine Sammelklasse einige Kinderklassen als Eigenschaften. Wie kann ich auch die Eigenschaften von Kinderklassen festlegen?
Lösung 2
Ich habe dies durch Hinzufügen gelöst __setitem__
im Unterricht. als ich
result = as_class()
for key,value in dict_expr.items():
result.__setitem__(key,value)
Und in meiner Klasse __setitem__
ist wie
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
Andere Tipps
Es hört sich so an, als ob Sie so etwas wie ein Objektrelations-Mapper wollen. Ich bin der Hauptautor von einem Ming , aber es gibt auch mehrere andere für Python. In Ming können Sie Folgendes tun, um Ihre Zuordnung einzurichten:
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()
Anschließend können Sie eine bestimmte Seite abfragen über:
pg = WikiPage.query.get(title='MyPage')
pg.comments # loads comments via a second query from MongoDB
Die verschiedenen ODMs, die ich für MongoDB in Python kenne, sind unten aufgeführt.