2013-01-18 2 views
8

У меня есть коллекция Монго, которые выглядят так:C# MongoDB «Рядом» Запрос

{ 
"_id": { 
    "$oid": "50e9f38fbd7680c8090bcb4" 
}, 
"guid": "D3G5wQ8RZL", 
"lat": 37.503287248864, 
"lng": -121.97620341421, 

} Я хочу преформ «NEAR» запрос с использованием C# Linq

это нужно искать что-то подобное

query = query.Where(x => LinqToMongo.Inject(Query.Near("Location", -96.770401, 32.816774, 20))); 

МОЙ вопрос: что мне следует вводить в код «Местоположение»? как я могу проверить очки из коллекции выше?

Спасибо.

ответ

19

От MongoDB 2.4, магазин и указатель GeoJSON. Вы можете найти все концепции here.

Как определить свойство GeoJSON на тип POCO:

public class Foo 
{ 
    public GeoJsonPoint<GeoJson2DGeographicCoordinates> Location { get; set; } 
} 

Пример конкретизации:

var docToInsert = new Foo 
      { 
       Location = new GeoJsonPoint<GeoJson2DGeographicCoordinates>(
        new GeoJson2DGeographicCoordinates(-121.97620341421, 37.503287248864)) 
      }); 

$near требует геопространственной индекса, и так как мы сохраняем в формате GeoJSON, он конкретно требует a индекс 2dsphere:

var collection = //get MongoCollection<Foo> from MongoDatabase object 
collection.EnsureIndex(IndexKeys<Foo>.GeoSpatialSpherical(x => x.Location)); 

Теперь запрос:

var point = GeoJson.Point(GeoJson.Geographic(-96.770401, 32.816774)); //long, lat 

var locationClause = Query<Foo>.Near(y=> y.Location, point, 20); //20 is max distance from your question. note that it's in meters 
IQueryable<Foo> query = collection.AsQueryable().Where(x=> locationClause.Inject()); 

//or with the non-generic Query: 
IQueryable<Foo> query = collection.AsQueryable().Where(x=> Query.Near("Location", point, 20).Inject()); 
+1

Что такое пространство имен запроса? – Max

+0

Я пробовал этот код, но получил ошибку в методе Inject(), как отсутствие сборки, как я могу это решить, искал в google, но не нашел пространство имен – Singh

+0

Выше запрос разрешен, но при запуске кода получена ошибка: Метод LinqToMongo.Inject предназначен только для использования в предложениях LINQ Where « – Singh

Смежные вопросы