MongoDB aggregate возвращает случайные результаты каждый раз (PyMongo)

#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 для всех данных это слишком дорого. Спасибо за ответ.