Как вернуть позицию документа на основе поля в моторе (mongodb)

Я хочу иметь возможность быстро определять позицию конкретных игроков в разных областях. Например, получение позиции игрока на основе его рейтинга. Ниже приведен рабочий метод, но мне было интересно, есть ли лучший способ сделать это.

      import motor.motor_asyncio
from pymongo import ASCENDING, DESCENDING
from bson.objectid import ObjectId

async def get_position(_id: ObjectId, field: str, filter: dict = None) -> int:
        cursor = collection.find(filter)
        cursor.sort(field, pymongo.DESCENDING)
        itr = await cursor.to_list(10)
        for index, document in enumerate(itr):
            if document['_id'] == _id:
                return index + 1

Я также хотел бы иметь возможность отфильтровывать документы / проигрыватели, у которых нет обязательного поля. Я, например, не хочу рассматривать игроков, чье поле ranked является False при получении позиции в рейтинге игроков.

Обновление: я понял, что могу просто пройти {'ranked': True} в collection.find(), но я все же хотел бы знать, есть ли лучший способ сделать остальное.

0 ответов

Другие вопросы по тегам