2012-07-09 3 views
2

Je cours la version 2.06 de Mongodb et la version (1.5) du pilote C# fourni par 10Gen. Je veux avoir des coordonnées de latitude et de longitude sur l'une de mes entités afin que je puisse interroger des entités en utilisant GeoNear ou Query.WithinCircle. J'ajoute un objet Location fortement typé à mon entité, puis je crée un index sur l'objet Location qui est suspendu à mon entité, mais je ne peux obtenir aucune requête GeoNear.MongoDB + C# Pilote + interrogation des champs géospatiaux - Comment définir la propriété location sur les entités

Voici à quoi ressemble mon entité Location.

public class Location 
{ 
    [BsonDefaultValue(null)] 
    public Nullable<double> lon { get; set; } 

    [BsonDefaultValue(null)] 
    public Nullable<double> lat { get; set; } 
} 

Voici à quoi ressemble mon entité en question.

public class SomeEntity 
    { 
    public string Field1 {get; set;} 

    // more fields here... 

    public Location Loc {get; set;} 
    } 

J'ai trouvé ce lien http://www.mongodb.org/display/DOCS/Geospatial+Indexing/ et voir que mon champ d'emplacement doit être un tableau. À quoi ressemblerait mon entité, SomeEntity, avec un champ tableau au lieu de mon objet Location?

Je sais que c'est simple, je ne peux pas le comprendre! :-)

Merci

Répondre

4

Vous pouvez essayer ceci:

public class SomeEntity 
{ 
    public string Field1 {get; set;} 

    // more fields here... 

    public double[] Loc {get; set;} 
} 

Bien que votre classe existante doit avoir travaillé (alors que les tableaux sont recommandés la seule exigence réelle est que l'objet se composent de deux nombres). Je n'utiliserais probablement pas Nullable < double> et juste utiliser double à la place.

En quoi votre requête geo ne fonctionnait-elle pas?

+0

Salut @Robert Stam - Merci pour l'entrée. J'ai supposé que mon objet de localisation devrait fonctionner aussi bien qu'il fournissait simplement deux nombres. Ma requête geo ne renvoyait aucune donnée. Voici à quoi cela ressemblait .. var options = GeoNearOptions.SetMaxDistance (100/this.EarthRadius); var activeUsers = Query.EQ ("Actif", vrai); var potentialUsers = userCollection.GeoNear (activeUsers, nDestinationLatitude, nDestinationLongitude, 5, options); Un index a été établi sur les données en utilisant le code suivant de userCollection.EnsureIndex (« IndexKeys.GeoSpatial (» loc ")); – RDotLee

+0

Désolé j'ai essayé de formater mon code de commentaires, mais n'a pas pu trouver la syntaxe: - – RDotLee

+0

J'ai trouvé le problème! Quand j'ai défini l'index j'ai utilisé "loc" quand le nom de mon champ est réellement Loc, sensible à la casse Merci – RDotLee

Questions connexes