2017-07-28 6 views
0

私は現在、(バージョンのpackages.configから次の抜粋を参照してください)MongoDBのための.NETラッパーを使用しています: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(); 

プログラムは、 "VARクエリ" ラインを実行すると、それは言って、例外をヒット "ABS(({PinLocation.Latitude} - 3.209096)が)。サポートされていない"。

上記の例外を解決するにはどうすればよいですか?それ以外の場合、上記の問題を解決できない場合の回避策は何ですか?

答えて

1

これは動作しますか?

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呼び出しを使用して読みやすくしました。最初にクエリを実行する前にチェックすることをお勧めします。

関連する問題