Ale*_*llo 3 c# location distance geolocation mongodb
我正在使用C#MongoDB驱动程序2.0进行NearSphere查询,并且工作正常。结果是按距离自动排序的,但是我希望为每个搜索结果找回该距离,以便能够将其显示回来。我发现这篇文章说如何针对旧版本的驱动程序执行此操作,并从Near查询中检索距离“ dis”结果,但未设法找到如何使用新驱动程序进行操作。
这是我的代码:
var collection = database.GetCollection<MyType>("myTypes");
var locFilter = Builders<MyType>.Filter.NearSphere(x => x.GeoLocation, criteria.Long, criteria.Lat, criteria.RadiusInMiles/3963.2);
var results = await collection.Find(locFilter).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
我想我必须在IFindFluent结果上调用ToList之前做点什么?
有什么帮助吗?
非常感谢
C#MongoDB驱动程序缺少一些操作,但实际上查询数据库没有任何限制。Project,Match等方法仅是构建PipeLine的帮助者,而PipeLine就像其他任何BsonDocument一样。
我不得不使用与您类似的方法从C#查询数据库:
db.mycoll.aggregate(
[ { $geoNear :
{ near : { type : "Point", coordinates : [-34.5460069,-58.48894900000001] },
distanceField : "dist.calculated", maxDistance : 100,
includeLocs : "dist.location",
num : 5, spherical : true }
} ,
{ $project : {_id: 1, place_id:1, name:1, dist:1} }
] ).pretty()
Run Code Online (Sandbox Code Playgroud)
如您所知,没有在驱动程序中构建的geoNear方法,因此您只需创建BsonDocument。为了向您展示一切都可以以这种方式构建,我在BsonDocument中构建了一个C#示例查询,该示例查询也不使用项目子句。您可以根据需要在管道中推送BsonDocument。
var coll = _database.GetCollection<UrbanEntity>("mycoll");
var geoNearOptions = new BsonDocument {
{ "near", new BsonDocument {
{ "type", "Point" },
{ "coordinates", new BsonArray {-34.5460069,-58.48894900000001} },
} },
{ "distanceField", "dist.calculated" },
{ "maxDistance", 100 },
{ "includeLocs", "dist.location" },
{ "num", 5 },
{ "spherical" , true }
};
var projectOptions = new BsonDocument {
{ "_id" , 1 },
{ "place_id", 1 },
{ "name" , 1 },
{ "dist", 1}
};
var pipeline = new List<BsonDocument>();
pipeline.Add( new BsonDocument { {"$geoNear", geoNearOptions} });
pipeline.Add( new BsonDocument { {"$project", projectOptions} });
using(var cursor = await coll.AggregateAsync<BsonDocument>(pipeline)) {
while(await cursor.MoveNextAsync()) {
foreach (var doc in cursor.Current) {
// Here you have the documents ready to read
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |