C# MongoDB.NET异常:不支持的筛选器
我目前正在使用mongodb的.NET包装器(有关版本,请参阅packages.config中的以下摘录):C# MongoDB.NET异常:不支持的筛选器,c#,.net,mongodb,linq,mongodb-.net-driver,C#,.net,Mongodb,Linq,Mongodb .net Driver,我目前正在使用mongodb的.NET包装器(有关版本,请参阅packages.config中的以下摘录): 我试图构建一个简单的过滤器,以获取位置的纬度和经度在LatitudeDelta和LongtudeDelta定义的特定限制范围内的项目 bool filterAll = string.IsNullOrEmpty(username) || username == "*"; var filter = Builders<Models.MapQuery>.Filter.Where
我试图构建一个简单的过滤器,以获取位置的纬度和经度在LatitudeDelta和LongtudeDelta定义的特定限制范围内的项目
bool filterAll = string.IsNullOrEmpty(username) || username == "*";
var filter = Builders<Models.MapQuery>.Filter.Where(p => (filterAll || (username == p.CreatorUsername))
&& Math.Abs(p.PinLocation.Latitude - desiredLatitude) < latitudeDelta
&& Math.Abs(p.PinLocation.Longitude - desiredLongitude) < longitudeDelta);
var queries = await db.GetCollection<Models.MapQuery>(Constants.MAP_QUERY)
.Find(filter)
.ToListAsync();
bool filterAll=string.IsNullOrEmpty(username)| username==“*”;
var filter=Builders.filter.Where(p=>(filterAll | |(username==p.CreatorUsername))
&&Math.Abs(p.PinLocation.Latitude-desiredLatitude)
当程序执行“var querys”行时,它遇到一个异常,表示“Abs({PinLocation.Latitude}-3.209096”)不受支持。”
如何修复上述异常?否则,如果上述问题无法解决,解决方法是什么?这是否可行
var filter = Builders<Models.MapQuery>.Filter.And(
Builders<Models.MapQuery>.Filter.Eq(p => p.username, username),
Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Latitude - desiredLatitude), latitudeDelta),
Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Longitude - desiredLongitude), longitudeDelta));
var filter=Builders.filter.And(
Builders.Filter.Eq(p=>p.username,username),
Builders.Filter.Lt(p=>Math.Abs(p.PinLocation.Latitude-desiredLatitude),latitudeDelta),
Lt(p=>Math.Abs(p.PinLocation.Longitude-desiredLongitude),longitudeDelta);
我更改了代码,使用内置API调用以提高可读性。我建议您在执行查询之前先进行检查
var filter = Builders<Models.MapQuery>.Filter.And(
Builders<Models.MapQuery>.Filter.Eq(p => p.username, username),
Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Latitude - desiredLatitude), latitudeDelta),
Builders<Models.MapQuery>.Filter.Lt(p => Math.Abs(p.PinLocation.Longitude - desiredLongitude), longitudeDelta));