简体   繁体   中英

Fetched sorted API data(NodeJs &Mongoose) not getting displayed in sorted order when try display in Angular UI

I have tried to get sorted in backend & tested via postman and I am getting sorted order.

const locationInfo = await locationDetails.find(query).sort({sectionName:1});
res.json(locationInfo);

[
    {    //some other keys &values
        "sectionName": "Closet",
    },
    {
        "sectionName": "Dining",

    },
    {
        "sectionName": "Kitchen",

    },
    {

        "sectionName": "Other",
    },
    {

        "sectionName": "Refrigerator",
    }
]

After REST call storing result to,

this.result=data;

but when I try to display the same resultant data on UI, Its not getting displayed in sorted order as well as checked in console also resultant data order got changed.

Console Data

[{
sectionName: "Refrigerator",
},
{
sectionName: "Kitchen",
},
{
sectionName: "Dining",
},
{
sectionName: "Closet",
},
{
sectionName: "Other",
}]

Note: Tried to sort from.ts file also but it is not working.

this.result.sort(function(a,b){a.sectionName-b.sectionName});

If any help would be appreciated. Thanks!

SectioName is not a valid criterion for MongoDB to sort the return result. In this case, MongoDB does not know how to sort it.

Here is an example directly from the MongoDB documentation about cursor.sort() :

db.restaurants.insertMany( [
   { "_id" : 1, "name" : "Central Park Cafe", "borough" : "Manhattan"},
   { "_id" : 2, "name" : "Rock A Feller Bar and Grill", "borough" : "Queens"},
   { "_id" : 3, "name" : "Empire State Pub", "borough" : "Brooklyn"},
   { "_id" : 4, "name" : "Stan's Pizzaria", "borough" : "Manhattan"},
   { "_id" : 5, "name" : "Jane's Deli", "borough" : "Brooklyn"},
] );

# The following command uses the sort() method to sort on the borough field:
db.restaurants.find().sort( { "borough": 1 } )

Documents are returned in alphabetical order by borough, but the order of those documents with duplicate values for borough might not be the same across multiple executions.

.sort works best with numerical values. If you are in control of the backend and are able to change how data is stored in the database. I suggest you create a field for the creation date or just an index to indicate the order of the items.

Let's say your document looks something like this:

# Doc 1
{
sectionName: "Refrigerator",
order:1
}
# Doc 2
{
sectionName: "Refrigerator",
order:2
}

Then you can do

const locationInfo = await locationDetails.find(query).sort({order:1});

which will return you the documents sorted using the order field, and the order will be consistent.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM