Как получить всех потомков данного экземпляра модели в Google App Engine? - PullRequest
1 голос
/ 25 марта 2010

Используя отношения родитель-потомок, где у родителя могут быть дети, в то время как у каждого ребенка есть только один родитель, является ли использование Children.all().ancestor(parent.key) хорошим решением, когда дочерний объект создается путем установки parent = parent.key в конструкторе? Применяется ли ограничение 1000 для этого типа запроса?

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Другой способ получить потомков (потомков) родительского объекта в Google App Engine, который я только что обнаружил:

childrenEntities = db.query_descendants(parentEntity).fetch(1000)

Не уверен, будет ли это полезно для вас. Это было полезно для меня, потому что мне было трудно понять, как получить доступ к дочернему классу (классам), которые были созданы с помощью модуля Python, который я установил.

Как уже указывалось в других местах, предел 1000 для всего был снят в феврале 2010 года . Смотрите связанную запись в блоге для более подробной информации re: this.

2 голосов
/ 25 марта 2010

Запрос возвращает то, что вы ожидаете, все дочерние элементы, у которых есть указанный родительский элемент в любом месте их происхождения. Запрос выражает именно это, поэтому я сомневаюсь, что есть более простой способ сделать то же самое. Но App Engine продолжает добавлять функции и удивляет меня: -)

Возможно, вам нужно parent.key(), я думаю, это зависит от того, используете ли вы Python или Java.

Кстати, не рекомендуется использовать ancestor-parent-child для моделирования отношений в ваших данных. Группы объектов существуют для включения транзакций, а не для использования в качестве «свободного» ReferenceProperty. parent-child должен быть деталью реализации низкого уровня, означающей, что «эти две сущности могут потребоваться изменить в одной транзакции», или, возможно, «я играю трюк с оптимизацией, который позволяет мне использовать свойства списка без необходимости загружать список в память, когда я получаю лицо ". Как правило, если не все сущности «принадлежат» одному и тому же пользователю, то они не должны быть связаны с родительскими и дочерними объектами, потому что связывание их таким образом вызывает конфликт, когда разные пользователи пытаются изменить их через разные узлы хранилища данных :

http://code.google.com/appengine/docs/python/datastore/keysandentitygroups.html#Entity_Groups_Ancestors_and_Paths

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...