Разница между курсором .sort () и агрегацией $ sort - PullRequest
0 голосов
/ 17 сентября 2018

Я новичок в mongodb и не могу понять разницу между .sort() в запросе поиска и $sort в структуре агрегации.

db.collection.find({}).limit(1).sort({ createdAt: 1 })

и

db.collection.aggregation([
  { $sort: { createdAt: 1 }},
  { $limit: 1 }
])

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

При find порядок методов курсора sort и limit не имеет значения. Сортировка всегда будет выполняться до лимита (см. «Методы комбинированного курсора» в документации).

При aggregate порядок этапов $sort и $limit имеет смысл и определяет, какая операция выполняется первой.

0 голосов
/ 17 сентября 2018

Структура агрегирования имеет тенденцию быть очень сложной. Я бы порекомендовал любому, кто пытается освоить его, сначала изобразить вывод в своей голове (или создать SQL-запрос, если он работает лучше).

Тем не менее, разница в производительности: скажем, 10 вместо 1, для объяснения. если вы прочитали первый запрос,

db.collection.find({}).limit(10).sort({ createdAt: 1 })

собирается отфильтровать 10 элементов и отсортировать их. Второй собирается отсортировать все * элементы в коллекции и затем отфильтровать их до 10:

 db.collection.aggregation([
   { $sort: { createdAt: 1 }},
   { $limit: 10 }
 ])

Вы можете посмотреть этот курс с mongouniversity.com Надеюсь, это поможет вам понять:)

...