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

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top