【问题标题】:Implementing a mongodb aggregation pipeline in c#在 C# 中实现一个 mongodb 聚合管道
【发布时间】:2015-08-30 20:25:18
【问题描述】:

我有包含八个步骤的 mongdb '聚合查询',我可以在控制台和 RoboMongo 中成功运行。

db.getCollection("...").aggregate([
    {$match: { ... } },
    {$unwind: ... },
    {$project: { ... } },
    {$group: { ... } },
    {$project: { ... } },
    {$unwind: ... },
    {$group: { ... } }
])

现在是让这个东西在我的 asp.net 应用程序中运行的时候了,但是我在 c# 中的实现方面遇到了很大的困难。

新的聚合框架看起来很有前途,但我不想通过管道定义每个中间类型,而且据我所知,没有它它就无法工作。

所以问题是:
是否可以在不定义每个中间类型的情况下使用聚合框架?

其次,
实现此类现有查询的最佳方式是什么?

我看到该框架包含多种定义聚合管道的方法,例如不同的PipelineDefinition 实现和扩展方法,但我发现很少有文档和使用这些方法。

【问题讨论】:

  • 所有 C# 驱动程序所做的就是将您的 C# 查询编译为上述 MongoDB 查询。为什么不将此查询直接传递给 MongoDB?这样可以省去很多烦恼,也简单很多。
  • 是的,我自己一直在考虑这个问题。但我现在有一些东西几乎可以满足我的需求,但它涉及大量的中间类型。
  • 恕我直言,始终寻求最简单的解决方案。就可维护性而言,添加一个额外的 C# 层,只是为了将一些东西放入 C#,可能不是最好的方法。并且如果他们更改 C# 驱动程序,它可能会突然改变行为或运行速度慢 100 倍,所以这种情况无论如何都有点像彩票。
  • 然而,令我失望的是,新的聚合框架很难使用......看起来是$unwind 命令让一切都失败了。删除它,匿名类型一切正常......
  • 也许在 MongoDB Jira 门户上提交问题? C# 驱动程序人员实际上非常擅长将反馈整合到下一个版本中。见jira.mongodb.org

标签: c# .net mongodb aggregation-framework


【解决方案1】:

显然,C# 驱动程序的下一个版本 2.1 将增加对聚合的更好支持,请参阅 https://jira.mongodb.org/browse/CSHARP-935

2.1 的完整更改列表位于 https://jira.mongodb.org/browse/CSHARP/fixforversion/14580/?selectedTab=com.atlassian.jira.jira-projects-plugin:version-summary-panel

我建议在http://jira.mongodb.org/ 添加您的用例,C# 驱动程序的人非常敏感。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2017-05-27
    • 1970-01-01
    • 2015-04-24
    • 2020-09-20
    相关资源
    最近更新 更多