【问题标题】:Mongo geo results with 10gen official c# driverMongo geo 结果与 10gen 官方 c# 驱动程序
【发布时间】:2013-12-31 02:49:22
【问题描述】:

我刚刚下载了最新的官方 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(query)。我收到一个编译错误,它找不到 Find 的定义。

我正在拔头发,因为这应该很简单,而且在我尝试学习 mongo 时令人沮丧。任何帮助将不胜感激。谢谢!!

【问题讨论】:

    标签: mongodb mongodb-.net-driver


    【解决方案1】:

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

    Find 方法是在 MongoCollection 类中定义的,而不是在 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");
    

    关于地理查询的进一步说明:如果您计划进行球形查询,请确保按(经度、纬度)顺序存储您的数据。大多数地理查询可以按任一顺序处理经度和纬度(只要您保持一致),但球形查询要求顺序为(经度、纬度),因此我建议大家对此进行标准化从一开始。

    【讨论】:

    • 谢谢!这让我到达了我需要的地方。我正在将半径转换为弧度,所以确实没有结果。看来该方法使用公里或英里,你知道吗,还是英尺?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多