C# MongoDB查询<;T>;。其中(Expr)将数字类型转换为字符串
我使用MongoDB查询对象将C#表达式(表达式>)转换为JSON查询对象,如下所示: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
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以两种不同的方式提供了此功能。请参阅下面的文章。