2017-10-11 12 views
0

Je suis la construction d'une application d'événement et voudrais obtenir tous les événements à une certaine date, puis les trier par leur emplacement. Comment implémenter une requête comme celle-ci? C'est ce que le schéma ressemble:MongoDB Requête par date et tri par distance (Mongoose + App express)

var eventSchema = mongoose.Schema({ 
_id: { 
    type: String, 
    required: true 
}, 
name: { 
    type: String, 
    required: true 
}, 
start_time: { 
    type: Date 
}, 
location: { 
    type: { 
     type: String 
    }, 
    coordinates: [] 
}, 
}); 

Je sais que je peux interroger l'emplacement en utilisant le $ près, j'ai réussi à obtenir cette course. Mais je voudrais d'abord demander "start_time" et ensuite trier par les événements de cette date par leur distance à moi. Toutes les suggestions seraient très appréciées merci;)

Répondre

0

j'ai réussi à le faire fonctionner avec cette requête:

{ 
    location: { 
     $near : { 
     $geometry: { type: "Point", coordinates: [longitude,latitude] 
     }, 
     $maxDistance: 10000 
     } 
    }, 
    $and: [ 
     { start_time : {$gte: now, $lt: tomorrow} } 
    ] 
} 
1

Utilisez l'opérateur de pipeline agg $geoNear. Il renvoie les documents dans l'ordre de proximité à un point que vous spécifiez. Vous pouvez indiquer $geoNear pour limiter davantage la recherche à votre start_time (ou toute expression de requête arbitraire) avec l'option query dans l'appel. Détails ici: https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/

+0

grâce ce fut un peu compliqué pour mon petit exemple, je l'ai eu à travailler avec le $ et l'opérateur et de tordre le "trier" un peu. Merci quand même –