根据月份 (MERN) 对获取的 json 数据(来自 mongoDB)进行排序

Sort fetched json data(from mongoDB) according to months(MERN)

我想根据数据中给定的月份键更改数据的顺序。

这是我从 http://localhost:8080/api/allFests/[=16 获取的数据=]

{

"success": true,

"data": [

    

{
"festMonth": "February",
"festImage": "https://th.bing.com/th/id/OIP.q1sF3Eu_WEz8age76TeQKwHaF7?w=229&h=183&c=7&o=5&dpr=1.25&pid=1.7",
"_id": "60c5ba68161a104008fd42be",
"festTitle": "Vasant Panchami",

"__v": 0
},

{
"festMonth": "April",
"festImage": "https://th.bing.com/th/id/OIP._j1uMAIRJV0he0nkvtaQgQHaFj?w=239&h=180&c=7&o=5&dpr=1.25&pid=1.7",
"_id": "60c5bbc1161a104008fd42c0",
"festTitle": "\"Rama Navami",

"__v": 0
},

{
"festMonth": "March",
"festImage": "https://th.bing.com/th/id/OIP.r8CRWF-lF47McLatXHeb1QHaFj?w=205&h=180&c=7&o=5&dpr=1.25&pid=1.7",
"_id": "60c5bab6161a104008fd42bf",
"festTitle": "Holi",

"__v": 0
}

]

}

所以这里我有 festMonth 并且它可以有值 January,February....December.

在我的前端,我想先显示一月,然后二月......然后是十二月的数据。 (即按月份排序)

到现在,在数据库中显示为: IE。 先是二月卡,然后是四月卡,然后是三月卡。

这是我的获取方式:

App.js:

 const [fests,setFests]=useState([]);
  useEffect(() => {
    axios
      .get("/api/allFests")
      .then((res) => {
        setFests(res.data.data);
      })
      .catch((error) => {
        console.log(error);
      });
  }, []);

这是我在同一页面上的 return 功能:

<div className="map_main_div">


    {fests.map((item) => {
                  return (
            <div className="fest_div" key={item._id} style={{listStyle:"none"}}>

     <Card 

     className={classes.root} key={item.id}  >
                    <CardHeader
                      avatar={
                   <Avatar aria-label="recipe"                     className={classes.avatar}>
                        </Avatar>
                      }
               
                      title={item.festTitle}
                      subheader={item.festMonth}
                    />
                                    
                 
                  </Card>
                 </div>

                  );
                })}
                 </div>

这是我在 route.js 中的路线:

router.get('/allFests',async(req,res)=>{
    try{
        const allFest=await FestModel.find()
        if(allFest)
        {
            res.status(200).json({
                success:true,
                data:allFest
            })
        }
        else{
            res.status(400).json({
                success:false,
                error:"no fest found"
            })  
        }
    }
    catch(err){
        res.status(500).json({
            success: false,
            error: err.message
        })
    }
}

那么我该如何根据月份进行排序。

此外,是否可以更改 mongoDB 中的数据顺序?

您可以将所有月份名称存储在一个列表中,然后根据该列表进行排序。

const data = [ { "festMonth": "February", "festImage": "https://th.bing.com/th/id/OIP.q1sF3Eu_WEz8age76TeQKwHaF7?w=229&h=183&c=7&o=5&dpr=1.25&pid=1.7", "_id": "60c5ba68161a104008fd42be", "festTitle": "Vasant Panchami", "__v": 0 }, { "festMonth": "April", "festImage":
"https://th.bing.com/th/id/OIP._j1uMAIRJV0he0nkvtaQgQHaFj?w=239&h=180&c=7&o=5&dpr=1.25&pid=1.7", "_id": "60c5bbc1161a104008fd42c0", "festTitle": "\"Rama Navami", "__v": 0 }, { "festMonth": "March", "festImage": "https://th.bing.com/th/id/OIP.r8CRWF-lF47McLatXHeb1QHaFj?w=205&h=180&c=7&o=5&dpr=1.25&pid=1.7",
"_id": "60c5bab6161a104008fd42bf", "festTitle": "Holi", "__v": 0 } ],
    months = ["January", "February", "March", "April", "May", "June","July", "August", "September", "October", "November", "December"];

data.sort((a,b) => months.indexOf(a.festMonth) - months.indexOf(b.festMonth));
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }