Единственный () метод - 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()