2017-07-28 45 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調用以提高可讀性。我建議你在執行查詢之前先進行檢查。