Сортировка Mongodb без учета регистра

Я очень жестко структурирую один проект в nodejs (экспресс) с mongodb в качестве базы данных. Когда я получаю все данные с помощью sort (), он возвращает данные неправильным образом, поэтому есть ли способ получить их в правильном формате, как я ожидаю, как показано ниже: Если у нас есть три записи в БД:

---------------------
id  | Name |  aga
---------------------
1   | atul | 21
---------------------
2   | Bhavik | 22
---------------------
3   | Jay | 25

В настоящее время я получаю:

Данные серии 2,3,1

Я ожидаю, что впереди: 1,2,3

Это значит игнорировать регистр при сортировке, возможна ли сортировка без добавления нового столбца.

Вы пробовали sort({name:1}) или может заменить -1 для требуемого вывода?

Saikat Chakrabortty 25.08.2018 11:19

Это не будет работать, когда у нас будет больше записей, поскольку mongodb сортирует сначала заглавными буквами, а затем вторыми буквами, что означает, что он не проверяет нечувствительность к регистру

Rushabh Madhu 25.08.2018 11:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
2
9 242
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно использовать collation здесь с locale: "en"

db.collection.find({}).collation({ locale: "en" }).sort({ name: 1 })

Итак, для документа ниже

{ "_id" : 1, "name" : "Bhavik" }
{ "_id" : 2, "name" : "Jay" }
{ "_id" : 3, "name" : "atul" }

Ты получишь

{ "_id" : 3, "name" : "atul" }
{ "_id" : 1, "name" : "Bhavik" }
{ "_id" : 2, "name" : "Jay" }

На самом деле мне также нужно использовать заполнение по тому же запросу, тогда это возможно? Ниже приведен мой фактический код, который я использую: (я пробовал с коллекцией, но он дает ошибку) let properties = await Property.find ({'status': {$ in: status}}). Populate ({path: 'user ', модель:' Пользователь ', выберите:' first_name last_name mail contact_number '}). populate ({path:' category ', model:' Category ', select:' category_name id '}). sort (sortClause) .skip ( пропустить) .limit (на страницу) .exec ();

Rushabh Madhu 25.08.2018 11:49

получение ошибки, например: UnhandledPromiseRejectionWarning: MongoError: сервер 192.168.137.152:27017 не поддерживает сопоставление Моя ОС: Linux Ubuntu17

Rushabh Madhu 25.08.2018 11:55

версия mongoose и mongodb?

Ashh 25.08.2018 11:57

Mongoose 5.4 и вывод mongo --version выглядят следующим образом: версия db v3.2.20 версия git: a7a144f40b70bfe290906eb33ff2714933544af8 Версия OpenSSL: OpenSSL 1.0.2g Распределитель от 1 марта 2016 года: модули tcmalloc: нет среды сборки: distmod: ubuntu1604 distarch_: x86_64

Rushabh Madhu 25.08.2018 12:02

вам необходимо обновить версию mongodb до 3.4 или выше, чтобы использовать сопоставление

Ashh 25.08.2018 12:03

Вы можете передать collation: { locale: 'en' } непосредственно в параметре options метода find:

db.collection.find({ ...query }, {
  sort: ...,
  limit: ...,
  collation: { locale: 'en' }
}

Это для драйвера родной node-mongodb. Но не для мангуста. :-)

Ashh 17.07.2019 09:33

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

db.createCollection("collection_name", { collation: { locale: 'en_US', strength: 2 } } )

db.getCollection('collection_name').find({}).sort( { 'property_name': -1 } )

Более подробная информация: https://docs.mongodb.com/manual/core/index-case-insensitive/

Другие вопросы по теме