我在我的mongodb上创建了以下索引
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);
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#集合API的过滤器。
我已经提交了一个功能请求MongoDB在过去。见https://jira.mongodb.org/browse/csharp - 1585