how example documentacion docs create python mongodb python-2.7 bottle mongoengine

python - example - pymongo find by id



Convertir el objeto de retorno mongodb al diccionario (4)

Estoy usando el marco de la botella junto con mongoengine. Tengo un modelo de pedidos:

class OrderDetail(Option): orderDetailsQty = FloatField() def to_dict(self): return mongo_to_dict_helper(self) class Order(Document): userName = StringField(required=True) orderDate = DateTimeField() orderStatus = ListField(EmbeddedDocumentField(Status)) orderDetails = ListField(EmbeddedDocumentField(OrderDetail)) orderComments = ListField(EmbeddedDocumentField(Comment)) isActive = BooleanField() def to_dict(self): orderObj = mongo_to_dict_helper(self) orderDetailList = [] for orderDetail in orderObj["orderDetails"]: orderDetailList.append(orderDetail.__dict__) orderObj["OrderDetails"] = orderDetailList return (self)

Cuando se consulta a mongodb, obtengo un objeto que luego se convierte en un dict utilizando la siguiente función:

def mongo_to_dict_helper(obj): return_data = [] for field_name in obj._fields: if field_name in ("id",): continue data = obj._data[field_name] if isinstance(obj._fields[field_name], StringField): return_data.append((field_name, str(data))) elif isinstance(obj._fields[field_name], FloatField): return_data.append((field_name, float(data))) elif isinstance(obj._fields[field_name], IntField): return_data.append((field_name, int(data))) elif isinstance(obj._fields[field_name], ListField): return_data.append((field_name, int(data))) else: # You can define your logic for returning elements pass return dict(return_data)

Encontré esta función después de una larga búsqueda en internet. Más tarde descubrió que esta función también falla al definir un miembro como ListField (EmbeddedDocumentField (obj)).

También intenté escribir una condición para detectar el caso específico de EmbeddedDocumentField:

elif isinstance(obj._fields[field_name], EmbeddedDocumentField): return_data.append(mongo_to_dict_helper(data))

Pero eso tampoco sirvió de nada.

¿Alguien tiene una solución para este problema?


¿Qué hay de usar el método to_mongo de un objeto para convertirlo en un dict?

object.to_mongo()


Ampliando las respuestas de @ alexvassel''s y @ z0r, ​​llamando a .to_mongo() convierte el objeto a una instancia de SON . Una vez que lo tenga, puede llamar a su método .to_dict() para convertirlo en un diccionario .

Por ejemplo ... ( qset es un queryset que se devuelve desde mongoengine, después de, por ejemplo, Posts.objects.all() ).

sons = [ob.to_mongo() for ob in qset] for son in sons: print str(son.to_dict())


combinando todas las otras respuestas,

import json dict = {''data'':[json.loads(ob.to_json()) for ob in qset]}


import json json.loads(yourobj.to_json())