【问题标题】:Server side projection服务器端投影
【发布时间】:2018-08-19 13:08:51
【问题描述】:

我使用 c# mongodb 驱动程序。在其关于 Lambda Expressions Projection 的官方文档中,他们说:

驱动支持使用表达式树来渲染投影。
本质上,lambda 表达式包含在服务器上形成投影以及客户端结果所需的所有信息,并且不需要进一步的信息。

之后的几行,我们有:

当使用 lambda 表达式定义 Find 投影时,它会在客户端运行。

现在我对 Lambda 表达式 投影方面有点困惑。它是在服务器端运行还是在客户端运行?

当我使用.Include().Exclude() 方法投影文档时,它是创建服务器端投影还是客户端投影? 例如,如果我过滤一个Post 文档并且我想用.Exclude() 方法排除它的tags 字段,驱动程序是否会获取整个文档,然后在应用程序中排除tags 字段,或者它会发出一个Mongodb @987654331 @请求{ tags: 0 }投影?

Lambda 表达式 投影和使用.Include().Exclude() 投影文档之间的区别是什么?

谢谢。

【问题讨论】:

  • 你不需要也不应该放tags in your question title。标记系统绰绰有余(问题底部的蓝色小东西)。另请参阅tagging 上的帮助:“您应该在标题中使用标签的唯一情况是它们与标题的对话语气有机结合。” (它包括一个格式列表,如果您在标题中包含标签,则不应使用这些格式,其中包括 [标签] [问题标题])
  • 不客气 :-) 我没有考虑过你的问题,所以我很想知道答案是什么。
  • 如果它在客户端执行投影有点有趣,但我认为文档令人困惑。
  • 我觉得这可能意味着服务器只返回表达式中的字段,然后将其投影到新的表单客户端。

标签: c# mongodb


【解决方案1】:

在启用完整详细分析的示例数据库上进行一些研究和检查两种类型的投影后,我发现@ 987654330@ 和 .Include()(使用 Projection Builder),以及单个 Expression 投影类型在服务器端运行。我仍然不知道这些投影之间有什么区别 - 正如官方文档所说,但我解决了我的问题,现在我确定主要投影部分是在服务器端完成的。

以下是我在两种不同类型的驱动程序提供的预测中的研究结果(使用 hte 示例数据库和仅显示分析结果的有用部分):

使用表达式进行投影:

使用 Projection Builders (.Include() .Exclude()) 进行投影


看来我现在只能使用链接到图片(缺乏声誉!)。
cmets 中提供了指向我使用过的有用文档的链接。
我希望这会有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
相关资源
最近更新 更多