2011-05-02 4 views
2

J'essaie de trouver des enregistrements dans ma base de données mongoDB en fonction des valeurs des informations de latitude et de longitude enregistrées. Je veux appliquer la fonction suivante avec une découverte sur ma collection:Rechercher des enregistrements mongodb (dans mongoose + node.JS) basés sur une condition

exports.findDistance = findDistance(latitude, longitude) { 
    console.log('calculating with lat = ' + latitude + ' and longitude = ' + longitude); 
    var radian = 0.0174532925; 
    var x = Math.pow(Math.sin((latitude - this.latitude) * radian/2), 2); 
    var y = Math.cos(latitude - radian) * Math.cos(this.latitude - radian); 
    var z = Math.pow(Math.sin((longitude - this.longitude) * radian/2), 2); 
    var result = 2*3956*Math.asin(Math.sqrt(x + y * z)); 
    return result < 10; 
} 

Cette fonction retourne true lorsque mon résultat calculé est inférieur à 10 (j'utilise la latitude et la longitude de ma base de données, référencé par le « ce » objet et les deux paramètres). Comment puis-je obtenir tous les messages de mongoDB qui s'appliquent à cette fonction?

J'ai essayé ce qui suit:

exports.index = function(req, res) { 
    var latitude = value1; 
    var longitude = value2; 
    Message.find(Message.findDistance, [], function(err, msgs) { 
     // render the page 
    }); 
} 

Cependant, ma fonction findDistance ne semble pas être appelé par la fonction mangouste trouver (pas de sortie vu dans ma console développeur et je reçois juste tous les résultats renvoyés par ma collection mongoDB). Aussi, comment puis-je passer les paramètres de latitude et de longitude à la fonction findDistance?

Mon message schéma se présente comme suit:

Message = new Schema({ 
    text: { type: String, required: true }, 
    parent: String, 
    user: ObjectId, 
    latitude: Number, 
    longitude: Number, 
    date: { type: Date, default: Date.now } 
}); 

quelqu'un peut me aider? :)

Répondre

1

Votre fonction findDistance doit être définie dans MongoDB, pas dans node.js, afin qu'elle ait accès aux champs de la base de données lors de son exécution. Heureusement, MongoDB utilise JavaScript pour ses procédures stockées, donc la fonction devrait fonctionner.

Voir here pour les instructions sur le stockage et l'utilisation des procédures stockées MongoDB.

Questions connexes