sql >> Databasteknik >  >> NoSQL >> MongoDB

Sortera nycklar i Response Object från Mongoose i ExpressJS och NodeJS

Express' res.send metoden känner igen den artist är ett objekt och anropar JSON.stringify på den för att konvertera objektet till en JSON-sträng innan du skickar. För att förenkla lite, JSON.stringify metod itererar genom din artist objektnycklar i den ordning de skapades. (Här är en länk till den mer komplicerade beställningsförklaringen. ) Det förklarar det nuvarande beteendet.

Andra kanske kommer med sina egna förslag på hur du kan göra det du siktar på, men här är en enkel att prova först:

  • Gör först ditt egen JSON.stringify , använda en "ersätter" för att skapa den utdataordning du vill ha :

    const artistString = JSON.stringify(artist, ["realName", "stageName", ...])
    // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
    
  • Använd sedan res.json(artistString) , istället för res.send , för att skicka din JSON-sträng med rätt Content-Type rubrik. (res.send antar att du vill haContent-Type: “text/html” .)

Det finns definitivt mer komplicerade tillvägagångssätt, inklusive att skapa en funktion som hämtar nycklar, sorterar dem och returnerar en ersättare; eller skriv din egen .toJSON() ersätta JSON.stringify . Du kan behöva implementera en av dessa metoder, eftersom du har kapslade objekt; ersättarens beteende kan vara lite knäpp i det här fallet . Du kanske kan lista de kapslade egenskaperna direkt efter den överordnade, som:

["realName", "type", ...]

men eftersom du har samma namn för vissa kapslade egenskaper, kanske detta fungerar eller inte fungerar för dig. Du kanske måste stränga insidan innan du stränga utsidan (gah!).

I vilket fall som helst, förhoppningsvis kan mitt förslag vara ett första steg.




  1. Partitionera data runt en matchningsfråga under aggregering

  2. Stack Overflow, Redis och Cache-ogiltigförklaring

  3. Gör något om inget hittas med .find() mongoose

  4. docker mongo för enkel (endast primär nod) replikuppsättning (för utveckling)?