2017-07-28 46 views
0

我目前使用.NET包装MongoDB的(从packages.config参考以下节选版本):MongoDB的.NET异常:不支持的过滤器

<package id="mongocsharpdriver" version="2.4.2" targetFramework="net461" /> 
    <package id="MongoDB.Bson" version="2.4.2" targetFramework="net461" /> 
    <package id="MongoDB.Driver" version="2.4.2" targetFramework="net461" /> 
    <package id="MongoDB.Driver.Core" version="2.4.2" targetFramework="net461" /> 

我想建立一个简单的过滤器来获得的项目该位置的经度和纬度在由LatitudeDelta和LongitudeDelta定义的特定范围内。

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(); 

当程序执行 “变种查询” 行,它击中了一个异常说 “ABS(({} PinLocation.Latitude - 3.209096)),不支持”。

如何解决上述异常?否则,如果上述问题无法解决,那么解决方法是什么?

回答

1

Maby此作品?

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)); 

我更改了代码以使用内置的API调用以提高可读性。我建议你在执行查询之前先进行检查。