mongodb 반환 개체를 사전으로 변환
저는 mongo 엔진과 함께 병 프레임워크를 사용하고 있습니다.주문 모델이 있습니다.
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)
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)
인터넷에서 한참 검색한 결과 이 기능을 발견했습니다.나중에 멤버를 ListField(EmbeddedDocumentField(obj))로 정의하는 동안에도 이 함수가 실패한다는 것을 알게 되었습니다.
또한 Embedded DocumentField의 특정 사례를 잡기 위한 조건을 작성해 보았습니다.
elif isinstance(obj._fields[field_name], EmbeddedDocumentField):
return_data.append(mongo_to_dict_helper(data))
하지만 그것도 아무런 도움이 되지 않았습니다.
이 문제에 대한 해결 방법이 있는 사람이 있습니까?
그냥 사용하는 건 어때요?to_mongo
그것을 받아쓰기로 변환하는 객체의 방법?
object.to_mongo()
@alexvasel 및 @z0r의 답변에 대한 확장, 전화.to_mongo()
개체를 SON 인스턴스로 변환합니다.일단 그것을 갖게 되면, 당신은 그것을 사전으로 변환하는 방법을 호출할 수 있습니다.
예를 들면...(qset
mongo 엔진에서 반환되는 쿼리 집합입니다. Posts.objects.all()
).
sons = [ob.to_mongo() for ob in qset]
for son in sons:
print str(son.to_dict())
import json
json.loads(yourobj.to_json())
@alexvasel의 대답을 확장하면,to_mongo()
메서드는 SON 개체를 반환합니다. 이 개체를 호출하여 dict로 변환할 수 있습니다.to_dict()
방법
object.to_mongo().to_dict()
개체를 딕트로 변환하는 사용자 지정 방법
class Order(Document):
userName = StringField(required=True)
orderDate = DateTimeField()
orderStatus = ListField(EmbeddedDocumentField(Status))
orderDetails = ListField(EmbeddedDocumentField(OrderDetail))
orderComments = ListField(EmbeddedDocumentField(Comment))
isActive = BooleanField()
def as_dict(self):
return {
"user_name": self.userName,
"order_date": self.orderDate.strftime("%Y-%m-%d %H:%M:%S"),
}
이제 당신은 obj.as _dll을 사용하여 받아쓸 수 있습니다.
orders = Order.objects.all()
datas = [each.as_dict() for each in orders]
다른 모든 대답들을 합하면,
import json
dict = {'data':[json.loads(ob.to_json()) for ob in qset]}
두 가지 시나리오가 있을 수 있습니다.
- 쿼리가 CommandCursor 개체를 반환하는 경우
**records = list(CursorObject)**
ex - Class.objects().aggregate({...})
- 쿼리가 BaseQuerySet 개체를 반환하는 경우
**import json**
**records = json.loads(BaseQuerySetObject.to_json())**
ex - Class.objects().filter(..)
언급URL : https://stackoverflow.com/questions/13230284/convert-mongodb-return-object-to-dictionary
'programing' 카테고리의 다른 글
배치 스크립트에서 랜덤을 사용하는 방법은 무엇입니까? (0) | 2023.05.25 |
---|---|
정수.파스 - 더 좋은 방법? (0) | 2023.05.20 |
Getting all types in a namespace via reflection (0) | 2023.05.20 |
Windows Azure란 무엇입니까? (0) | 2023.05.20 |
WPF Numeric UpDown 컨트롤은 어디에 있습니까? (0) | 2023.05.20 |