Запросить наибольшее количество отношений «один ко многим»

У меня есть система «Нравится», чтобы отслеживать, кому что нравится.

parent модели Like — это объект, который нравится. Это может быть что угодно. Для этого примера давайте использовать Car. Модель Like также имеет свойство account, которое определяет, кому понравился этот Car.

Мне интересно, есть ли способ в хранилище данных/NDB запросить наибольшее количество лайков. Это не нормализовано, чтобы просто иметь необработанное число для объекта Car, но мне интересно, единственный ли это реальный способ сделать это.

По сути, если 10 разным людям нравится один объект Car, а 5 разным людям нравится другой объект Car, каким будет запрос для перечисления этих элементов с указанием количества?

Если бы я знал, какие Car объектов запрашивать, я мог бы просто запросить те из таблицы Like и просто подсчитать количество объектов, которые в ней есть, и это, очевидно, дает мне общее количество Like для этого Car, но я иду в другом направлении. с этим.


person Jer_TX    schedule 30.01.2020    source источник
comment
Насколько я понимаю, вы можете использовать предковый запрос. Он ограничивает свои результаты указанным объектом и его потомками. Тогда вам нужно будет только использовать SUM() или COUNT(), чтобы получить общее количество лайков. Если я неправильно понял, было бы здорово, если бы вы могли быть более конкретными или предоставить схему, которую вы объясняете в вопросе. Я надеюсь, что это помогает.   -  person Christopher Rodriguez Conde    schedule 30.01.2020


Ответы (1)


Как описано, это невозможно: без фактического свойства счетчика вам сначала нужно выполнить отдельные запросы, чтобы получить каждый из соответствующих счетчиков, а затем выполнить дополнительный шаг, чтобы определить максимум этих счетчиков.

Однако если вы добавите свойство счетчика liked к понравившимся объектам (в вашем примере Car), которое вы увеличите в той же транзакции, в которой вы создадите соответствующий объект Like, вам больше не потребуется первый раунд запросов для получения считает. Таким образом, вы сможете выполнить один запрос для каждого типа понравившегося объекта (запрос для Car объектов в примере) - упорядоченный (по описанию) по свойству liked и, возможно, с ограничением количества результатов - что даст вам наиболее понравившийся объект (с) такого рода.

person Dan Cornilescu    schedule 01.02.2020