Вы не можете сделать это напрямую в CouchDB, потому что вы можете одновременно работать только с одним документом.
Чтобы выполнить запрос такого рода, вам нужно денормализовать популярность пользователя в его документе и отсортировать по нему. Это немного сложно, так как вам нужно следить за тем, чтобы значение обновлялось по мере изменения друзей пользователя.
У вас есть несколько вариантов, как это сделать, но что лучше всего зависит от того, как структурирован ваш код.
Вы можете переназначить значение для всех друзей пользователя как часть функции сохранения для объекта User. Преимуществом этого является простота и мгновенное обновление значения, но это замедлит сохранение, а если вы сохраните пользователей в нескольких местах, это будет сложно.
Вы можете использовать систему обработки фоновых задач (например, Celery ) для обновления значения. Это похоже на обновление его как части функции сохранения, но вы мгновенно получаете выгоду от более быстрого процесса сохранения.
Наконец, вы можете отслеживать _changes , чтобы следить за изменениями в списках друзей и денормализовать значение в них. Это дает преимущество, заключающееся в том, что обновление хранится в одном месте и полностью отделено от остального кода, а также гарантирует, что вы не пропустите и не обновите.