Come ordinare l'array di documenti incorporati tramite query mongoose?
Domanda
Sto costruendo un'applicazione Node.js con mongoose e ho un problema relativo all'ordinamento di documenti incorporati. Ecco lo schema che uso:
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 ]
});
Vorrei produrre le posizioni incorporate nelle locazioni utente documentate ordinate dal loro attributo tempo. Attualmente faccio l'ordinamento in JavaScript dopo aver recuperato i dati da MongoDB in questo modo:
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);
}
});
Ho letto dell'API di smistamento fornita da Mongoose, ma non riuscivo a capire se può essere utilizzato per ordinare array di documenti incorporati e se sì, se si tratta di un approccio sensato e come applicarlo a questo problema. Qualcuno può aiutarmi qui, per favore?
Grazie in anticipo e applausi, Georg
Soluzione
Lo stai facendo nel modo giusto, Georg. Le tue altre opzioni sono o ordinare le posizioni per tempo dopo l'incorporamento in primo luogo, o seguire il percorso più tradizionale non incorporato (o percorso minimamente incorporato in modo da poter incorporare una serie di ID o qualcosa del genere, ma in realtà stai interrogando il posizioni separatamente).