Frage

Ich baue eine node.js -Anwendung mit Mongoose und habe ein Problem im Zusammenhang mit der Sortierung eingebetteter Dokumente. Hier ist das Schema, das ich benutze:

var locationSchema = new Schema({
    lat: { type: String, required: true },
    lon: { type: String, required: true },
    time: { type: Date, required: true },
    acc: { type: String }
})

var locationsSchema = new Schema({
    userId: { type: ObjectId },
    source: { type: ObjectId, required: true },
    locations: [ locationSchema ]
});

Ich möchte die in den userLocations eingebetteten Standorte ausgeben, die nach ihrem Zeitattribut sortiert sind. Ich mache derzeit die Sortierung in JavaScript, nachdem ich die Daten von MongoDB wie SO abgerufen habe:

function locationsDescendingTimeOrder(loc1, loc2) {
   return loc2.time.getTime() - loc1.time.getTime()
}

LocationsModel.findOne({ userId: theUserId }, function(err, userLocations) { 
   userLocations.locations.sort(locationsDescendingTimeOrder).forEach(function(location) {
      console.log('location: ' + location.time);
   }
});

Ich habe über die von Mongoose bereitgestellte Sortier -API gelesen, aber ich konnte nicht herausfinden, ob sie zum Sortieren von Arrays von eingebetteten Dokumenten verwendet werden kann und ob es sich um einen vernünftigen Ansatz handelt und wie man sie auf dieses Problem anwendet. Kann mir bitte jemand hier helfen, bitte?

Vielen Dank im Voraus und Prost, Georg

War es hilfreich?

Lösung

Du machst es richtig, Georg. Ihre anderen Optionen sind entweder, Standorte nach Zeit nach dem Einbettung in erster Linie zu sortieren oder die traditionellere nicht eingefasste Route (oder die minimal eingebettete Route, damit Sie möglicherweise eine Reihe von IDs einbetten, oder so etwas, aber Sie fragen tatsächlich die Standorte getrennt).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top