Как вернуть позицию документа на основе поля в моторе (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()
, но я все же хотел бы знать, есть ли лучший способ сделать остальное.