mah*_*han 28 python mongodb mongoengine bottle python-2.7
我正在使用瓶子框架和mongoengine.我有订单型号:
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)
Run Code Online (Sandbox Code Playgroud)
当查询mongodb时,我得到一个对象,然后使用以下函数将其转换为dict:
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)
Run Code Online (Sandbox Code Playgroud)
经过长时间的互联网搜索,我发现了这个功能.后来发现,在将成员定义为ListField(EmbeddedDocumentField(obj))时,此函数也会失败.
我还尝试编写一个条件来捕获EmbeddedDocumentField的特定情况:
elif isinstance(obj._fields[field_name], EmbeddedDocumentField):
return_data.append(mongo_to_dict_helper(data))
Run Code Online (Sandbox Code Playgroud)
但这也没有任何好处.
任何人都有解决此问题的方法?
ale*_*sel 44
如何使用to_mongo对象的方法将其转换为dict?
object.to_mongo()
Run Code Online (Sandbox Code Playgroud)
ara*_*lar 25
扩展@ alexvassel和@ z0r的答案,调用.to_mongo()将对象转换为SON实例.一旦拥有它,您可以调用其.to_dict()方法将其转换为字典.
例如......(qset是一个从mongoengine返回的查询集,例如Posts.objects.all()).
sons = [ob.to_mongo() for ob in qset]
for son in sons:
print str(son.to_dict())
Run Code Online (Sandbox Code Playgroud)
扩展@alexvassel 的答案,to_mongo()方法返回SON object,您可以通过调用其to_dict()方法将其转换为 dict
object.to_mongo().to_dict()
Run Code Online (Sandbox Code Playgroud)