MongoDb c# driver 2.0 查询样式

Posted

技术标签:

【中文标题】MongoDb c# driver 2.0 查询样式【英文标题】:MongoDb c# driver 2.0 query styles 【发布时间】:2015-08-07 15:02:48 【问题描述】:

早期我们为MongoDb 使用LINQ 提供程序,但现在我们已经迁移到MongoDb c# driver 2.0 并且有一些我不明白的事情。

当我们使用LINQ 提供程序时,查询如下:

  var query = from c in dbCollection.AsQueryable()
                        where c.UserId == userId && c.CampaignId == campaignId
                        select c;

但现在我可以通过几种方式实现它:

var query =
     Builders<Analytics>.Filter.Eq(a => a.UserId, userId) &
     Builders<Analytics>.Filter.Eq(a => a.CampaignId, campaignId);

Builders<Analytics>.Filter.Where(
c => c.created >= Convert.ToDateTime(dateFrom) &&
     c.created <= Convert.ToDateTime(dateTo));

这些方法有什么不同或优势吗?

【问题讨论】:

【参考方案1】:

在我曾经做过的 MongoDB 教程中,他们说你总是可以使用 LINQ,但你不应该强迫它。 这仅仅是因为并不是所有的东西都已经在 LINQ 中实现了,而且可能不是(或者甚至不可能)通过 LINQ“方式”来实现。 这实际上意味着您可以同时使用这两种方式。您可以尽可能使用 Fluent API 或 LINQ。

【讨论】:

那么使用Where和一些谓词和Eq,Ne等构建器的方法没有区别吗? 其实我的回答只是部分关于 LINQ 和其他两种风格的比较。我至少希望这应该将所有内容转换为“驱动程序通信”。我想一定有某种方法可以通过某些服务器统计信息或任何其他方法来验证这一点。必须有一种方法来验证驱动程序的真正作用(可能在 Shell 中使用的 javascript 表示法中) 如果我添加 --verbose 作为我的 mongo 服务器实例的命令行参数,我可以看到查询的某些部分。因此,您可以尝试这两种方法并检查这两种方法是否会导致不同的行为。 解释功能可能也有助于检查这一点。看到这个问题***.com/questions/13254784/…

以上是关于MongoDb c# driver 2.0 查询样式的主要内容,如果未能解决你的问题,请参考以下文章

C# mongodb driver 2.0 - 如何在批量操作中更新插入?

C# MongoDB 驱动程序 2.0 - 从近处查询返回距离

mongodb 查询的用法

mongodb c#语法基础

MongoDB for C#基础入门

使用c#查询mongodb文档字段值