使用过滤器时的性能。在哪里使用MongoDB C#驱动程序
假设您有以下代码行:使用过滤器时的性能。在哪里使用MongoDB C#驱动程序,c#,mongodb,performance,C#,Mongodb,Performance,假设您有以下代码行: var filter = Builders<BsonDocument>.Filter.Where(t => t.id == myId); var result = collection.Find(filter).ToList(); var-filter=Builders.filter.Where(t=>t.id==myId); var result=collection.Find(filter.ToList(); 过滤器生成器是否将lambda转换为文
var filter = Builders<BsonDocument>.Filter.Where(t => t.id == myId);
var result = collection.Find(filter).ToList();
var-filter=Builders.filter.Where(t=>t.id==myId);
var result=collection.Find(filter.ToList();
过滤器生成器是否将lambda转换为文本$where子句,还是对其进行优化以使用$eq子句$where的性能很慢,所以如果没有翻译,我不想使用它
这是一个简单的示例,但我们的代码中还有其他查询,它们比较长,但很容易转换为非$where查询。多亏了David Osborne的上述评论,我才能够进行更多的研究并找到答案。事实证明,简单的LINQ查询实际上直接转换为本机Mongo查询,而不是$where查询
var filter = Builders<BsonDocument>.Filter.Where(x => x["status"] != "ready");
var findFluent = collection.Find(filter);
Console.WriteLine(findFluent);
filter = Builders<BsonDocument>.Filter.Ne("status", "ready");
var findFluent = collection.Find(filter);
Console.WriteLine(findFluent);
var filter=Builders.filter.Where(x=>x[“status”]!=“ready”);
var findFluent=collection.Find(过滤器);
控制台写入线(findFluent);
filter=Builders.filter.Ne(“状态”、“准备就绪”);
var findFluent=collection.Find(过滤器);
控制台写入线(findFluent);
两者都打印出相同的查询。这适用于等式运算符和逻辑运算符的简单组合
但是,有些操作符似乎无法通过LINQ访问。我试图在查询中写入$
var success = new List<string> { "imported", "processed" };
var filter = Builders<BsonDocument>.Filter.Where(x => success.Contains(x["status"].ToString()));
var success=新列表{“已导入”、“已处理”};
var filter=Builders.filter.Where(x=>success.Contains(x[“status”].ToString());
并得到一个运行时错误。与正则表达式匹配类似
var regex = new Regex("^*0000");
var filter = Builders<BsonDocument>.Filter.Where(x => regex.IsMatch(x["orderId"].ToString()));
var regex=new regex(“^*0000”);
var filter=Builders.filter.Where(x=>regex.IsMatch(x[“orderId”].ToString());
这并不奇怪,但很高兴知道。我认为您可以在调试期间从驱动程序获得实际查询。