Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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
使用过滤器时的性能。在哪里使用MongoDB C#驱动程序_C#_Mongodb_Performance - Fatal编程技术网

使用过滤器时的性能。在哪里使用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());

这并不奇怪,但很高兴知道。

我认为您可以在调试期间从驱动程序获得实际查询。