Единственный () метод - Mongoengine

Небольшой вопрос Mongoengine: я хотел спросить, есть ли смысл в этом:

MyClass.objects.only('MyEmbeddedField.MyField').first().MyEmbeddedField.MyField 

чтобы сохранить сложность?

Из того, что я понимаю, вызов метода first() загружает весь объект из БД (поправьте меня, если я ошибаюсь). Это даже хорошая идея?

Как мне получить доступ только к определенному полю из документа?

1 ответ

Вот кое-что, что я попытался воспроизвести в вашем случае. Согласно .only (), он загружает только подмножество общих полей документа.

Рассмотрим следующий документ.

class Test(Document):
    my_first_field = StringField()
    my_second_field = IntField()

а потом,

t = Test(my_first_field='my field data', my_second_field=10)
t.save()

Затем, как только вы запросите их,

for i in Test.objects(id=t.id).only('my_first_field').exclude('id'):
    print(i.to_json())

for i in Test.objects(id=t.id).only('my_first_field'):
    print(i.to_json())

Таким образом, вы получите предпочтительный вывод:

{"my_first_field": "my field data"}
{"_id": {"$oid": "5aafc55119185b2ac0f8e729"}, "my_first_field": "my field data"}

Точно так же вы можете связать .first() на запрос, и он выберет вам первый соответствующий запрос с полями, которые вы запрашиваете для включения и / или исключения.

Test.objects(id=t.id).only('my_first_field').exclude('id').first().to_json()
Другие вопросы по тегам