2011-07-08 7 views
1

Je viens de télécharger le pilote 10gen mongo C# officiel le plus récent (1.1.0.4184) et j'essaie de faire ce que je pense est une requête assez simple pour obtenir des résultats en fonction de l'emplacement :Mongo résultats de géo avec 10gen fonctionnaire C# driver

MongoServer server = MongoServer.Create("xxxxxx"); 
MongoCredentials credentials = new MongoCredentials("user", "pw"); 
MongoDatabase mongoDB = server.GetDatabase("housing", credentials); 
MongoCollection _houses = housing.GetCollection(houses); 
var a = Query.WithinCircle("houseLocation", Double.Parse(latitude), double.Parse(longitude), maxDistance); //maxDistance is in radians 
var cursor = _houses.FindAs<House>(a); 
foreach (var b in cursor) 
{ 
    //something 
} 

Si je l'exécute par débogage, j'obtiens, "l'énumération n'a donné aucun résultat".

J'ai vu beaucoup d'exemples de code et il semble que beaucoup utilisent la méthode Find que je ne semble pas avoir. Si je tape _houses.Find (requête). Je reçois une erreur de compilation qui ne trouve pas de définition pour Find. Je tire les cheveux parce que cela devrait être plutôt simple et frustrant alors que j'essaie d'apprendre le mongo. Toute aide serait grandement appréciée. Merci!!

Répondre

0

FindAs le plus probable n'a renvoyé aucun résultat car aucun document ne correspondait à la requête. Nous devrions voir des exemples de documents et les valeurs de vos paramètres pour déterminer pourquoi ils ne correspondent pas à la requête.

La méthode Find est définie dans la classe MongoCollection < TDefaultDocument> et non dans la classe MongoCollection (qui est une classe de base abstraite). Vous ne voyez pas la méthode Find car vous avez défini votre variable _houses en tant que MongoCollection.

On dirait que votre objet de collection doit avoir un type de document par défaut de House. Je recommande de déclarer votre variable de _houses comme ceci:

var _houses = mongoDB.GetCollection<House>("houses"); 
// or if you don't like var: 
MongoCollection<House> _houses = mongoDB.GetCollection<House>("houses"); 

Une autre note sur votre géo requête: si jamais vous envisagez de faire des requêtes sphériques assurez-vous de stocker vos données dans (longitude, latitude) commande. La plupart des requêtes geo peuvent travailler avec la longitude et la latitude dans l'ordre (pour autant que vous soyez cohérent), mais les requêtes sphériques nécessitent que l'ordre soit (longitude, latitude), donc je recommande à tout le monde de standardiser dès le début.

+0

Merci! Cela m'a permis d'être là où je devais être. Je convertissais le rayon en radians, donc il n'y avait aucun résultat. Il semble que la méthode utilise km ou miles, savez-vous, ou est-ce que ce sont les pieds? – Rizyak

Questions connexes