C# Mongodb查询的最佳方式
Hi开始在c#中使用mongodb,发现它非常酷,只是想知道查询的最佳方式 似乎有以下选项C# Mongodb查询的最佳方式,c#,mongodb,C#,Mongodb,Hi开始在c#中使用mongodb,发现它非常酷,只是想知道查询的最佳方式 似乎有以下选项 var query = Query<Entity>.EQ(e => e.Id, id); var entity = collection.FindOne(query); 现在,第二个对我来说更具吸引力,因为我已经习惯了,但是在性能和最佳实践方面,有什么区别和建议吗?您的第一个示例是使用驱动程序本机查询-本质上是通过查询帮助程序等创建查询文档 第二个是使用Linq 在引擎
var query = Query<Entity>.EQ(e => e.Id, id);
var entity = collection.FindOne(query);
现在,第二个对我来说更具吸引力,因为我已经习惯了,但是在性能和最佳实践方面,有什么区别和建议吗?您的第一个示例是使用驱动程序本机查询-本质上是通过
查询
帮助程序等创建查询文档
第二个是使用Linq
在引擎盖下,这两个问题归结为生成相同的查询:
db.entity.find({_id: 'abc123'});
在本例中,结果QueryDocument被序列化为查询
{_id: 'abc123'}
根据报告:
仅支持可转换为等效MongoDB查询的LINQ查询。如果编写无法翻译的LINQ查询,则会出现运行时异常,错误消息将指示查询的哪一部分不受支持
对我来说,这意味着将LINQ查询转换为MongoDB查询会有一些开销
我还没有对此进行测试,但我怀疑使用查询的性能会稍微好一些。第一种方法是构建一个查询,然后使用它来查找结果
第二种方法是直接LINQ查询,对于.NET开发人员来说通常更为熟悉
规范模式为您提供了一个可重用的过滤逻辑。如果您经常需要按照相同的条件筛选集合,尤其是需要将筛选器应用于来自不同存储库的集合,那么它非常有用
下面是一个可能使用它的快速示例(请原谅任何粗略的代码,我已经离开C#有一段时间了):
如果您重新定义了什么是“可用的小部件”,您可以更新规范,让所有消费者的行为都相同。我没有明确的答案,但您是否尝试过使用System.Diagnostics.Stopwatch来围绕代码进行查询,比如说,进行了一千次?应该给你一些更多的信息。考虑到这是一个数据库操作,往返数据库的时间可能会掩盖你在代码中所做的任何优化。今晚必须尝试一下,我会在这个线程中发布结果
{_id: 'abc123'}
static class WidgetSpecification {
function Query<Widget> AvailableWidgets()
{
return new Query<Widget>.EQ(e =>
e.StartDate <= Date.Today
&& e.EndDate >= Date.Today
&& e.Active == true
&& e.InStock == true);
}
}
{
...
var products = getProductsFromSomewhere();
var query = WidgetSpecifiation.AvailableWidgets();
var availableProducts = Products.Find(query);
...
}