Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MongoDB查询<;T>;。其中(Expr)将数字类型转换为字符串_C#_Json_Mongodb_Linq - Fatal编程技术网

C# MongoDB查询<;T>;。其中(Expr)将数字类型转换为字符串

C# MongoDB查询<;T>;。其中(Expr)将数字类型转换为字符串,c#,json,mongodb,linq,C#,Json,Mongodb,Linq,我使用MongoDB查询对象将C#表达式(表达式>)转换为JSON查询对象,如下所示: 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 q

我使用MongoDB查询对象将C#表达式(表达式>)转换为JSON查询对象,如下所示:

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查询),因此此解决方案无法工作。我尝试使用Builders类:

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);
}
var query=Builders.Filter.Where(icomparrecriteria.RenderToBsonDocument().ToJson();
公共静态BsonDocument渲染器BsonDocument(此筛选器定义筛选器)
{
var serializerRegistry=BsonSerializer.serializerRegistry;
var documentSerializer=serializerRegistry.GetSerializer();
返回filter.Render(documentSerializer、serializerRegistry);
}

但这也会生成一个字符串值…

如果您想记录C#driver发送给服务器的查询,您可以修改
MongoClient设置

但是,如果您只想提取C#生成的JSON查询,可以使用
IFindFluent

var query = collection.Find(s => s.StudentId == 0);
var jsonQuery = query.ToString();
jsonQuery将包含类似的内容,但取决于查询

find({ "student_id" : 0 })

如果要记录C#驱动程序发送到服务器的查询,可以修改
MongoClientSettings

但是,如果您只想提取C#生成的JSON查询,可以使用
IFindFluent

var query = collection.Find(s => s.StudentId == 0);
var jsonQuery = query.ToString();
jsonQuery将包含类似的内容,但取决于查询

find({ "student_id" : 0 })

我实际测试了您的更新代码,它为以下两种用法生成了正确的json值

var filter1 = Builders<TestObj>.Filter.Gt(t => t.Age, 20);
var json1 = filter1.RenderToBsonDocument().ToJson();
// Result: { "Age" : { "$gt" : 20 } }

var filter2 = Builders<TestObj>.Filter.Where(t => t.Age > 20);
var json2 = filter2.RenderToBsonDocument().ToJson();
// Result: { "Age" : { "$gt" : 20 } }
var filter1=Builders.Filter.Gt(t=>t.Age,20);
var json1=filter1.RenderToBsonDocument().ToJson();
//结果:{“年龄”:{“$gt”:20}
var filter2=Builders.Filter.Where(t=>t.Age>20);
var json2=filter2.RenderToBsonDocument().ToJson();
//结果:{“年龄”:{“$gt”:20}

我使用的是MongoDB C#驱动程序版本2.2.3.3。

我实际测试了您的更新代码,它为以下两种用法生成了正确的json值

var filter1 = Builders<TestObj>.Filter.Gt(t => t.Age, 20);
var json1 = filter1.RenderToBsonDocument().ToJson();
// Result: { "Age" : { "$gt" : 20 } }

var filter2 = Builders<TestObj>.Filter.Where(t => t.Age > 20);
var json2 = filter2.RenderToBsonDocument().ToJson();
// Result: { "Age" : { "$gt" : 20 } }
var filter1=Builders.Filter.Gt(t=>t.Age,20);
var json1=filter1.RenderToBsonDocument().ToJson();
//结果:{“年龄”:{“$gt”:20}
var filter2=Builders.Filter.Where(t=>t.Age>20);
var json2=filter2.RenderToBsonDocument().ToJson();
//结果:{“年龄”:{“$gt”:20}

我正在使用MongoDB C#驱动程序版本2.2.3.3。

好的,问题是我在与十进制类型进行比较。然后将变量从整数转换为十进制类型变量,我们都知道mongodb无法序列化小数…:(
因此,它生成了一个字符串。

好的,问题是我在与十进制类型进行比较。然后变量从整数类型转换为十进制类型变量,我们都知道mongodb无法序列化十进制…:(
因此,它产生了一个字符串。

是否可以升级您的C#驱动程序?我已经考虑过了,因为我使用的是部分旧版驱动程序。但是较新的版本不提供json功能的表达式。实际上,较新的比特以两种不同的方式提供此功能。请参阅下面的帖子。是否可以升级您的C#驱动程序C#驱动程序?我在使用部分旧版驱动程序时已经考虑过这一点。但是较新的版本没有提供json功能的表达式。实际上,较新的bits以两种不同的方式提供了此功能。请参阅下面的文章。