Detta är en intressant fråga.
Det fungerar som de flesta ECMAScript-implementationer faktiskt gör bevara nyckelordningen (t.ex. V8 som används av Node). Den officiella Node MongoDB-drivrutinen uppmuntrar inte dess användning, istället erbjuder den två olika notationer:
Mongoose-dokumentationen nämner ingenting om nyckelordning (åtminstone inte vad jag känner till). Men den erbjuder också två olika metoder för sortering :
Det verkar faktiskt som att sorteringsfunktionen i Mongoose var baserad på felaktiga (men för närvarande giltiga) antaganden. Det är förmodligen bäst om du använder strängnotationen när du sorterar med flera nycklar.Sortering med objektnotationen fungerar korrekt när du använder MongoDB direkt (t.ex. i MongoDB-skalet) eftersom den inte använder ren JSON utan förlängd JSON .
Se även denna mycket relaterade fråga:Hur kan du ange ordningen på egenskaper i ett javascript-objekt för ett MongoDB-index i node.js?
Det finns också ett Mongosproblem om detta:
Så när du använder Mongoose, använd antingen strängnotationen eller det nyligen tillagda stödet för ES2015 Maps som garanterat kommer att beställas genom insättningsorder.