import mongoengine
class MyLog(mongoengine.EmbeddedDocument):
text = mongoengine.StringField()
class Server(mongoengine.DynamicDocument):
name = mongoengine.StringField()
status = mongoengine.StringField()
text_list = mongoengine.ListField(mongoengine.EmbeddedDocumentField(MyLog))
Server.objects.all()
набор запросов не включает значение поля text_list
по умолчанию. Я должен сделать это (чтобы получить значение поля text_list
для каждого объекта в наборе запросов.
for s in Server.objects.all():
print s.text_list
В моем случае/сценарии я не могу этого сделать, я имею в виду, что мне нужно получить все данные в самом наборе запросов (или, другими словами, мне нужно иметь набор запросов, который также даст мне все вложенные данные без использования obj.text_list
)
например
Далее в оболочке монго - db.server.find()
включает все вложенные встроенные документы.
{
'_id': ObjectId("272742942qbe5451b4f4b9e7"),
'name':'nm',
'status': 'st',
'text_list': [
{# here it's including embedded model's info too, no need to make extra query, looking for similar query in mongoengine orm
'text': 'done'
}
]
}
как мы можем сделать это в mongoengine, используя orm или raw_query.
Я могу решить эту проблему в форме mongoengine, используя метод to_json()
json.loads(queryset.to_json())
Server.objects.all().to_json()
возвращает результат, который включает информацию о встроенных моделях, но это неэффективно при использовании нумерации страниц для миллионов документов, я имею в виду, что в этом случае монго попытается преобразовать все объекты в to_json.