#python #mongodb #pymongo
#python #mongodb #pymongo
Вопрос:
Я столкнулся со странным поведением pymongo.aggregate
.
Я использую pymongo collection.aggregate()
для получения результатов. Команда возвращает новые результаты каждый раз даже при простом запросе.
In [8]: print([i['_id'] for i in col.aggregate([
...: {'$match': {'$text': {'$search': 'mark'}}},
...: {'$limit':2}])])
['CA 990342008', 'TX 16854869']
In [9]: print([i['_id'] for i in col.aggregate([
...: {'$match': {'$text': {'$search': 'mark'}}},
...: {'$limit':2}])])
['TX 8210259', 'CA 993322075']
Был бы рад, если бы кто-нибудь указал мне на то, что я пропустил в документах.
Ответ №1:
Как и в большинстве баз данных, порядок возвращаемых документов является произвольным, если не запрашивается конкретный порядок. Это делается в целях оптимизации; как только внутренний движок имеет 2 совпадающих документа (в вашем примере), нет необходимости делать что-либо еще, поэтому вы можете увидеть разные результаты.
В MongoDB вы можете запросить определенный порядок, используя .sort()
оператор или, в случае вашего примера, $sort
этап конвейера агрегации.
Комментарии:
1. У меня 18 миллионов записей, и
sort
для всех данных это слишком дорого. Спасибо за ответ.