Я очень жестко структурирую один проект в nodejs (экспресс) с mongodb в качестве базы данных. Когда я получаю все данные с помощью sort (), он возвращает данные неправильным образом, поэтому есть ли способ получить их в правильном формате, как я ожидаю, как показано ниже: Если у нас есть три записи в БД:
---------------------
id | Name | aga
---------------------
1 | atul | 21
---------------------
2 | Bhavik | 22
---------------------
3 | Jay | 25
В настоящее время я получаю:
Данные серии 2,3,1
Я ожидаю, что впереди: 1,2,3
Это значит игнорировать регистр при сортировке, возможна ли сортировка без добавления нового столбца.
Это не будет работать, когда у нас будет больше записей, поскольку mongodb сортирует сначала заглавными буквами, а затем вторыми буквами, что означает, что он не проверяет нечувствительность к регистру





Вам нужно использовать 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 ();
получение ошибки, например: UnhandledPromiseRejectionWarning: MongoError: сервер 192.168.137.152:27017 не поддерживает сопоставление Моя ОС: Linux Ubuntu17
версия mongoose и mongodb?
Mongoose 5.4 и вывод mongo --version выглядят следующим образом: версия db v3.2.20 версия git: a7a144f40b70bfe290906eb33ff2714933544af8 Версия OpenSSL: OpenSSL 1.0.2g Распределитель от 1 марта 2016 года: модули tcmalloc: нет среды сборки: distmod: ubuntu1604 distarch_: x86_64
вам необходимо обновить версию mongodb до 3.4 или выше, чтобы использовать сопоставление
Вы можете передать collation: { locale: 'en' } непосредственно в параметре options метода find:
db.collection.find({ ...query }, {
sort: ...,
limit: ...,
collation: { locale: 'en' }
}
Это для драйвера родной node-mongodb. Но не для мангуста. :-)
Создайте коллекцию с сопоставлением по умолчанию, таким образом вы можете упорядочить по любому свойству без учета регистра.
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/
Вы пробовали
sort({name:1})или может заменить -1 для требуемого вывода?