C#mongo附近的查询无法找到$ geoNear的索引

时间:2015-08-12 13:06:46

标签: c# mongodb

我在Mongo db上创建了以下索引

db.AddressInformations.createIndex({"Address.Gps" : "2dsphere"}, {bits:26})
在mongo shell中我可以运行它并且它可以正常工作

db.AddressInformations.find({"Address.Gps": {
$near: {
    $geometry:{ 
        type: "Point", 
        coordinates: [-84.26060492426588, 30.45023887165371]
    }
}
}})

但是,如果我尝试运行其中任何一个

db.AddressInformations.find({"Address.Gps" : {$geoNear:[-81.941429, 26.639506]}})

db.AddressInformations.find({"Address.Gps" : {$near:[-81.941429, 26.639506]}})

我收到此错误

unable to find index for $geoNear query

在我的C#代码中,我也尝试运行此查询并获得相同的错误

var query = Builders<BsonDocument>.Filter.Near("Address.Gps",
             GeoJson.Point(GeoJson.Geographic(lon, lat)));

var returnItems = await MongoCollection.FindAsync(query, findOptions, 
                         cancellationToken.Token);

return await returnItems.ToListAsync(cancellationToken.Token);

1 个答案:

答案 0 :(得分:0)

C#MongoDB有一定的局限性,与MongoDB shell相比,在功能方面往往落后。

请尝试以下代码段:

var query = "{'Address.Gps': {$near: {$geometry:{type: 'Point', coordinates: [-84.26060492426588, 30.45023887165371]}}}}";

var filter = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument> (query);

var result = db.AddressInformations.find(filter);

这里我将MonogoDB shell查询转换为BsonDocument并将其用作C#collection API的过滤器。

我过去曾向MongoDB提交过功能请求。见https://jira.mongodb.org/browse/CSHARP-1585