I am struct very hard at one project in nodejs(express) with mongodb as database. When i get all data using sort() it returns data in wrong manner, so is there way to get it properly format as i am expecting as below: If we have three record in DB:

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

What i am getting at present is:

2,3,1 series data

What i expect is to come is: 1,2,3

It means is to ignore the case while sorting is it possible without adding new column.

Solution 1

You need to use collation here with locale: "en"

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

So for the below document

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

You will get

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

Solution 2

Create the collection with a default collation by this way you can order by any property with case insensitive.

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

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

More info: https://docs.mongodb.com/manual/core/index-case-insensitive/

Solution 3

You can pass collation: { locale: 'en' } directly in the options parameter of the find method:

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