我想使用mongodb的AggregationFramework和C#驱动程序来创建一个长聚合管道。
不幸的是,我在尝试维护管道中的原始记录时遇到了一个奇怪的错误。
使用下面的代码,我得到:
var entry = battleLogs.Aggregate()
.Project(x => new
{
Record = x, // Code works when this line is commented out
CSum = x.Player1.Score + x.Player2.Score,
...
})
.First();
我收到此错误:
System.NotSupportedException: "$project or $group does not support {document}."
我在管道中计算了许多其他属性,我需要保留我正在使用的原始记录/文档。
我尝试将文档的每个成员复制到匿名对象的新成员中(使用相同的名称)。
这样可行,但是文档(BattleLog)有很多字段,因此手动将每个字段复制到一个新的匿名对象中会产生大量的工作,并且当只需要一些属性时会不必要地污染范围。时间。
为什么会发生错误,我该怎么办才能阻止它?
编辑:
我正在寻找的等价物是本机mongodb脚本中的$addFields
函数。
我需要做的是将所有字段添加到我想要保留的匿名对象中,但是根文档中的许多字段都要多,所以我希望将原始文档保留在聚合管道中。
也许使用dynamic
类型有一些技巧?