Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
177 views
in Technique[技术] by (71.8m points)

node.js - 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!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...