【发布时间】: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