に番号の種類を変換し、ここで見られるようなオブジェクト:私はしたいMongoDBのクエリ<T> .Where(exprが)私はJSONクエリにC#の式(式>)に変換するためにMongoDBのクエリオブジェクトを使用している文字列
class TestObj
{
public string Name { get; set; }
public Int32 Age { get; set; }
}
public void TestQueryMethod()
{
var mongoquery = Query<TestObj>.Where(to => to.Age > 20);
var queryjson = mongoquery.ToJson(); // -> { "age" : { "$gt" : "20" }}
}
このJSONクエリ文字列を私のバックエンドに送ってください。このJSONクエリ文字列をmongoqueryに解析します(これはうまくいきます)。問題は定数 "年齢"(20)が文字列に変換され、データベースフィールドは数値型です。データベースには、したがって、任意のオブジェクトを返しません...
私はすでに、ドライバのソースコードに見ていたし、定数式は、常に常に文字列として解析されます:
private void VisitValue(object value)
{
// [..]
_sb.Append(value.ToString());
}
更新: フロントエンドでデータベースコレクションにアクセスできないため(フロントエンドはjsonクエリのみを送信します)、この解決策は機能しません。私は、ビルダークラスを使用してみました:
var query = Builders<T>.Filter.Where(iCompareCriteria).RenderToBsonDocument().ToJson();
public static BsonDocument RenderToBsonDocument<T>(this FilterDefinition<T> filter)
{
var serializerRegistry = BsonSerializer.SerializerRegistry;
var documentSerializer = serializerRegistry.GetSerializer<T>();
return filter.Render(documentSerializer, serializerRegistry);
}
しかし、それはまた、文字列値を生成しています...
C#ドライバをアップグレードすることは可能ですか? ? – Saleem
レガシードライバの一部を使用しているので、私はすでに考えていましたが、新しいビルドではjsonの機能に表現が提供されていません。 – gabs
実際には新しいビットは、この機能を複数の方法で提供します。 – Saleem