使用10gen官方c#驱动程序获得Mongo geo结果

时间:2011-07-08 20:28:30

标签: mongodb mongodb-.net-driver

我刚刚下载了最新的官方10gen mongo c#驱动程序(1.1.0.4184),我正在尝试做一些我认为非常简单的查询,以便根据位置获取一些结果:

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
}

如果我通过调试运行它得到,“枚举没有产生结果”。

我看过很多代码示例,似乎很多人都使用了我似乎没有的Find方法。如果我输入_houses.Find(查询)。我收到一个编译错误,它无法找到Find的定义。

我要把头发拉出来,因为这应该很简单,当我想学习mongo时,这很令人沮丧。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

很可能FindAs没有返回任何结果,因为没有文档与查询匹配。我们必须查看一些示例文档和参数值,以确定它们与查询不匹配的原因。

Find方法在MongoCollection&lt; TDefaultDocument&gt;中定义。 class,不在MongoCollection类(这是一个抽象基类)中。您没有看到Find方法,因为您将_houses变量定义为MongoCollection。

看起来您的集合对象应该具有House的默认文档类型。我建议像这样声明你的_houses变量:

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

关于地理位置查询的进一步说明:如果您计划进行球形查询,请确保以(经度,纬度)顺序存储数据。大多数地理查询都可以按任意顺序使用经度和纬度(只要你是一致的),但球形查询需要顺序为(经度,纬度),所以我建议每个人都标准化从一开始就是。