запрос фильтра mongoengine извлекает встроенные документы

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.


person Wendy    schedule 03.05.2016    source источник
comment
пожалуйста уточните вопрос. сначала вы говорите, что результат не включен, затем вы говорите, что можете получить доступ к результату через атрибут экземпляра.   -  person lesingerouge    schedule 04.05.2016
comment
@lesingerouge: обновлены детали вопроса.   -  person Wendy    schedule 05.05.2016
comment
Как говорит @lesingerouge, непонятно, чего вы хотите. Набор запросов возвращает документ со встроенными полями, к которым вы можете получить доступ как к атрибутам экземпляра. Что еще?   -  person Jérôme    schedule 10.05.2016


Ответы (1)


Если вы хотите разбить результаты вашего набора запросов на страницы с помощью flask-mongoengine, вы должны просто использовать метод paginate метода Queryset:

# Paginate through todo
def view_todos(page=1):
    paginated_todos = Todo.objects.paginate(page=page, per_page=10)

Здесь вы можете найти дополнительную информацию о части шаблонов и других доступных функциях.

person lesingerouge    schedule 05.05.2016