Библиотека уроков
Все уроки
Сортировка списков коллекций
Узнайте, как сортировать элементы в списках коллекций.
В этом видео старый пользовательский интерфейс. Скоро будет обновленная версия!
Клонировать этот проект
Расшифровка
Можно указать порядок сортировки списков коллекции на основе определенного поля или полей. Например, вы можете отсортировать список коллекции «Последние новости» по полю даты. Или вы можете отсортировать список художников по имени. Или вы можете захотеть, чтобы в ограниченном списке коллекций случайным образом отображалась «цитата дня». Или вы можете создать собственный порядок сортировки.
Для каждого типа поля будут доступны разные правила.
Алфавитный (A-Z) / обратный алфавитный (Z-A)Для сортировки текстовых полей, полей опций, ссылок или любых других текстовых полей.
При сортировке по алфавиту ваши элементы будут отсортированы в следующем порядке:
В приведенном ниже примере сначала отображается 10 (даже если это большее число), поскольку 1 (первое число в 10) меньше 7.
От наименьшего к наибольшему / от наибольшего к наименьшемуДля сортировки числовых полей .
От старых к новым или от новых к старымДля сортировки любого поля даты.
Сначала включено / Сначала выключеноДля сортировки по переключаемым полям.
Случайный порядокЭто будет рандомизировать порядок списка каждые 12 часов.
Примечание : Список Коллекция с нумерацией страниц может иметь Случайный порядок только при повторной публикации проекта, а не каждые 12 часов.
Вы можете добавить несколько порядков сортировки. Список коллекции будет отсортирован сначала по первому правилу порядка сортировки, затем по второму и так далее. Например, список «Члены команды» может быть сначала отсортирован по переключателю «Сотрудник месяца», а затем может быть отсортирован случайным образом после этого.
Если порядок сортировки по умолчанию не совсем то, что вам нужно, вы всегда можете создать собственный порядок сортировки, добавив новое пользовательское поле CMS в вашу коллекцию . Вы будете использовать это новое поле и введенную в него информацию для сортировки элементов коллекции .
Давайте добавим новое поле:
Теперь, когда новое поле «Пользовательский порядок сортировки» создано, вам нужно будет добавить число в это пустое поле в каждом элементе коллекции . Этот номер указывает положение ваших предметов коллекции в новом пользовательском порядке сортировки.
Давайте отсортируем наши предметов коллекции по номерам, которые мы им присвоили:
Теперь ваши товары будут отсортированы в том порядке, в котором вы их пронумеровали.
Вы можете удалить примененный порядок сортировки, щелкнув значок корзины рядом с порядком сортировки.
Попробуйте Webflow — это бесплатно
Был ли этот урок полезен? Дайте нам знать!Свяжитесь с нашим сообществом
Свяжитесь со службой поддержки
Что-то пошло не так при отправке формы.
Связаться со службой поддержки
У вас есть предложение по уроку? Дайте нам знать
Спасибо! Ваша заявка принята!
Ой! Что-то пошло не так при отправке формы.
начинающий
начинающий — промежуточный
Bearner — Промежуточный
. Главная → Руководство по MongoDB
На этой странице
КРЕСТ. Это , а не .
документация для драйвера для конкретного языка, такого как Node.js. Драйверы API MongoDB см. в документации для конкретного языка.
Документация драйвера MongoDB.
Задает порядок, в котором запрос возвращает совпадающие документы.
Вы должны применить sort()
к курсору перед
получение любых документов из базы данных.
The sort()
method has the following parameter:
Parameter
Type
Description
sort
document Документ, определяющий порядок сортировки набора результатов.
Параметр sort
содержит пары полей и значений в
в следующей форме:
{ поле: значение }
Документ сортировки может указывать сортировку по возрастанию или по убыванию на
существующие поля или сортировать текстовые метаданные оценки.
Вы можете сортировать не более чем по 32 ключам.
Изменено в версии 4.4 .
MongoDB не хранит документы в коллекции в определенном порядке. При сортировке по полю, содержащему повторяющиеся значения, документы содержащие эти значения, могут быть возвращены в любом порядке.
Если требуется последовательный порядок сортировки, включите хотя бы одно поле в
сортировка, содержащая уникальные значения. Самый простой способ гарантировать это
чтобы включить поле _id
в запрос сортировки.
Рассмотрим следующую коллекцию ресторана
:
db.restaurants.insertMany( [ |
{ "_id" : 1, "name" : "Central Park Cafe", "boro" "}, |
{ "_id": 2, "name" : "Rock A Feller Bar and Grill", "район" : "Queens"}, |
{ "_id": 3, "name" : "Empire State Pub", "район" : "Бруклин"}, |
{ "_id" : 4, "имя" : "Stan's Pizzaria", "район" : "Манхэттен"}, |
{ "_id" : 5, "name" : "Jane's Deli", "район" : "Brooklyn"}, |
]); |
Следующая команда использует метод sort()
для сортировки. в поле borough
:
db.restaurants.find().sort( { "borough": 1 } ) |
поле содержит повторяющиеся значения для обоих Манхэттен
и Бруклин
.
Документы возвращаются в алфавитном порядке по номеру р-н
, но
порядок этих документов с повторяющимися значениями для района
может не
быть одинаковым для нескольких исполнений одного и того же вида. Например,
вот результаты двух разных исполнений вышеуказанной команды:
{ «_id» : 3, «name» : «Empire State Pub», «borough» : «Brooklyn» } |
{ » _id» : 5, «name» : «Jane’s Deli», «район» : «Brooklyn» } |
{ «_id» : 1, «name» : «Кафе Central Park», «район» : «Манхэттен» } |
{ «_id» : 4, «name» : «Stan’s Pizzaria», » район» : «Манхэттен» } |
{ «_id» : 2, «имя» : «Rock A Feller Bar and Grill», «район» : «Квинс» } |
{ «_id» : 5, «name» : «Jane’s Deli», «район» : «Brooklyn» } |
{ «_id» : 3, «name» : «Empire State Pub», «borough» : «Brooklyn» } |
{ «_id» : 4, «name» : «Stan’s Pizzaria», «район» : «Манхэттен» } |
{ «_id» : 1, «name» : «Кафе Central Park», «район» » : «Манхэттен» } |
{ «_id» : 2, «имя» : «Rock A Feller Bar and Grill», «район» : «Квинс» } |
В то время как значения для района
по-прежнему отсортированы в алфавитном порядке,
порядок документов, содержащих повторяющиеся значения по р-н
(например, Манхэттен
и Бруклин
) не одно и то же.
Для достижения согласованной сортировки добавьте поле, содержащее исключительно
уникальные значения для сортировки. В следующей команде используется метод sort()
для сортировки по обоим полям района
и поле _id
:
db.restaurants.find().sort( { «район»: 1, «_id»: 1 } ) |
Поскольку поле _5
Укажите в параметре сортировки поле или поля для сортировки и
значение 1
или -1
для указания сортировки по возрастанию или по убыванию
соответственно.
Следующая операция сначала сортирует документы по полю age
в порядке убывания, а затем по полю сообщений
в порядке возрастания:
db. users.find({}).sort({ age : -1, posts: 1 } ) |
При сравнении значений разных типов BSON, MongoDB использует следующий порядок сравнения, от самых низких до самых высоких:
Minkey (внутренний тип)
NULL
Числа (INTS, Longs, Doubles, Decimals)
Symbol, String
4Symbol, String
499., Строки
, Строки
.
Объект
Массив
BinData
ObjectId
Логический
Дата
Отметка времени
Регулярное выражение
MaxKey (внутренний тип) Сравнение/порядок сортировки.
Для поиска $text
вы можете сортировать по убыванию оценки релевантности
используя выражение { $meta: "textScore" }
.
В следующем образце документа указана сортировка по убыванию
метаданные:
db.users.find( |
{ $text: { $search: «operating» } }, | 1 | 1 db. » }} // Необязательно, начиная с MongoDB 4.4 |
).sort({ score: { $meta: «textScore» } }) |
Метаданные "textScore"
сортируются в порядке убывания.
Дополнительные сведения см. в разделе $meta
.
MongoDB может получать результаты операции сортировки из индекса, который включает поля сортировки. MongoDB может использовать несколько индексов для поддержки операция сортировки , если сортировка использует те же индексы, что и запрос предикат.
Если MongoDB не может использовать индекс или индексы для получения сортировки порядок, MongoDB должна выполнить операцию блокирующей сортировки данных. Блокирующая сортировка указывает, что MongoDB должна потреблять и обрабатывать все входные документы для сортировки перед возвратом результатов. Блокирующие сортировки не блокировать одновременные операции над коллекцией или базой данных.
Операции сортировки, использующие индекс, часто имеют более высокую производительность, чем блокирующие сорта. Для получения дополнительной информации о создании индексов для поддержки операции сортировки см. в разделе Использование индексов для сортировки результатов запроса.
Если MongoDB требует использования более 100 мегабайт системной памяти для
блокирующая операция сортировки, MongoDB возвращает ошибку , если запрос
указывает cursor.allowDiskUse()
( Новое в MongoDB 4.4 ). allowDiskUse()
позволяет MongoDB использовать временные файлы
на диске для хранения данных, превышающих лимит системной памяти в 100 мегабайт.
при обработке операции блокирующей сортировки.
Чтобы проверить, должна ли MongoDB выполнять сортировку с блокировкой, добавьте
на запрос и проверьте
объяснить результаты. Если план запроса
содержит этап SORT
, тогда MongoDB должен выполнить
блокировка операции сортировки при ограничении памяти в 100 мегабайт.
Чтобы блокирующая сортировка не потребляла слишком много памяти:
Создайте индекс для поддержки операции сортировки. Видеть Используйте индексы для сортировки результатов запроса для получения дополнительной информации и Примеры.
Ограничить количество данных для сортировки с помощью cursor.limit()
с cursor.sort()
. См. Ограничение результатов для получения дополнительной информации.
Информация и примеры.
Ограничения памяти для операций сортировки
Вы можете использовать sort()
в сочетании с limit()
для возврата первого (с точки зрения сортировки
порядка) тыс.
тыс.
— заданный лимит. Если MongoDB не может получить порядок сортировки с помощью сканирования индекса, тогда MongoDB
использует алгоритм сортировки top-k. Этот алгоритм буферизует первые тыс.
результатов (или последних, в зависимости от порядка сортировки), увиденных до сих пор
доступ к базовому индексу или коллекции. Если в какой-то момент память
размер этих тыс.
результатов превышает 100 мегабайт, запрос будет
ошибка , если запрос не указывает cursor.allowDiskUse()
( Новое в MongoDB 4.4 ).
Ограничения памяти для операций сортировки
Когда набор результатов отсортирован одновременно и по прогнозу, механизм запросов MongoDB всегда будет применить сортировку сначала .
Коллекция заказы
содержат следующие документы:
{ _id: 1, item: { категория: «торт», тип: «шифон» }, количество: 10 } |
{ _id: 3, item: { категория: «печенье», тип: «шоколадная стружка» }, количество: 15 } |
{ _id: 4, item: { категория: «торт», тип: «лимон» }, количество: 30 } |
{ _id: 5, предмет: { категория: «торт», тип: «морковь» }, количество: 20 } |
{ _id: 6, предмет: { категория: «домовые», тип: «блонди» }, количество: 10 } |
Следующий запрос, который возвращает все документы из заказов
коллекция, не указывает порядок сортировки:
db. orders.find() |
Запрос возвращает документы в неопределенном порядке:
: «itemy:» 1, «_id:» 1, «_id торт», «тип» : «шифон» }, «количество» : 10 } |
{ «_id» : 2, «предмет» : { «категория» : «печенье», «тип» : «шоколадная стружка» }, «количество» : 50 } |
{ «_id» : 3, «элемент» : { «категория» : «печенье», «тип» : «шоколадная стружка» }, «количество» : 15 } |
{ «_id» : 4, «предмет» : { «категория» : «торт», «тип» : «лимон» }, «количество» : 30 } |
{ «_id» : 5, «предмет» : { «категория»: «торт», «тип» : «морковь» }, «количество» : 20 } |
{ «_id» : 6, «предмет» : { «категория» : «пирожные» «, «type» : «blondie» }, «amount» : 10 } |
Следующий запрос определяет сортировку поля amount
в
в порядке убывания.
db.orders.find().sort( { сумма: -1 } ) |
Запрос возвращает следующие документы в порядке убывания количество
:
{ «_id» : 2, «предмет» : { «категория» : «печенье», «тип» : «шоколадная крошка» }, «количество» : 50 } |
{ «_id»: 5, «предмет»: { «категория» : «торт», «тип» : «морковь» }, «количество» : 20 } |
{ «_id» : 3, «элемент» : { «категория» : «печенье», «тип » : «шоколадная стружка» }, «количество» : 15 } |
{ «_id» : 1, «предмет» : { «категория» : «торт», «тип» : «шифон» }, «количество» : 10 } |
{ «_id» : 6, «item» : { «category» : «brownies», «type» : «blondie» }, «amount» : 10 } |
Следующий запрос определяет порядок сортировки с использованием полей из
встроенный документ пункт
. Сначала запрос сортируется по полю категории
.
в порядке возрастания, а затем внутри каждой категории
по типу
поле в порядке возрастания.
db.orders.find().sort( { «item.category»: 1, «item.type»: 1 } ) |
Запрос возвращает следующие документы, упорядоченные сначала по категория
поле и внутри каждой категории по типу поле
:
{ «_id» : 6, «item» : { «category» : «брауни», «type» : «blondie» }, «количество»: 10} |
{ «_id»: 5, «предмет»: { «категория»: «торт», «тип»: «морковь» }, «количество»: 20} |
{ «_id» : 1, «предмет» : { «категория» : «торт», «тип» : «шифон» }, «количество» : 10} |
{ «_id» : 4, «предмет»: { «категория»: «торт», «тип»: «лимон» }, «количество»: 30} |
{ «_id»: 2, «предмет»: { «категория»: «куки» «, «тип» : «шоколадная крошка» }, «количество» : 50 } |
{ «_id» : 3, «предмет» : { «категория» : «печенье», «тип» : «шоколадная крошка» }, «количество»: 15 } |
Параметр $natural
возвращает элементы в соответствии с их
естественный порядок в базе данных.
Об авторе