Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在mongodb中投影时如何保留原始文档?_C#_Mongodb_Linq_Aggregation Framework_Database - Fatal编程技术网

C# 在mongodb中投影时如何保留原始文档?

C# 在mongodb中投影时如何保留原始文档?,c#,mongodb,linq,aggregation-framework,database,C#,Mongodb,Linq,Aggregation Framework,Database,我想使用mongodb的AggregationFramework和C#驱动程序来创建一个长的聚合管道 不幸的是,我在试图维护管道中的原始记录时遇到了一个奇怪的错误 使用下面的代码,我得到: var entry = battleLogs.Aggregate() .Project(x => new { Record = x, // Code works when this line is commented out

我想使用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}."
我沿着管道计算了许多额外的属性,我需要保留我正在使用的原始记录/文档

我试图将文档的每个成员复制到匿名对象的一个新成员中(使用相同的名称)

这是可行的,但文档(战地日志)有很多字段,因此手动将每个字段复制到一个新的匿名对象将是一项很大的工作,并且在一次只需要几个属性的情况下不必要地污染范围

为什么会发生这种错误?我能做些什么来防止它

编辑: 我要寻找的等价物是原生mongodb脚本中的
$addFields
函数。 我需要做的是将所有字段添加到我想要保留的匿名对象中,但是由于根文档中有很多字段,所以我想沿着聚合管道保留原始文档


使用
动态
类型可能有一些技巧?

我不熟悉C#驱动程序,但在MongoShell中,您可以使用
$$ROOT
作为键。例如:
{$project:{record:“$$ROOT”}
我希望它能帮助您在mongoshell中所做的一切,您可以使用c#driver转换它并逐步构造查询文档step@AlexDenisov我认为这是驱动程序中的一个错误,它应该转化为你所说的。。。BRAHIMKamel:我知道这一点,但不幸的是,用BsonDocument语法构造查询非常复杂,而且不太直观。如果可能的话,我想坚持使用fluent api,因为它在其他方面工作得非常好。@Felheart只需给我们提供等效的Mongoquery@BRAHIMKamel这将是
{$project:{Player1:1,Player2:1,TimeStamp:1,…}
。这可以通过在新的匿名类型中包含源文档的所有字段来实现,但是对于根级别有许多字段的文档来说,这将是一项艰巨的工作。我看到还有一个
$addFields
操作符,它在mongo查询语法中实现了我想要的功能,但是c#驱动程序似乎不使用它。我不熟悉c#驱动程序,但在MongoShell中,您可以使用
$$ROOT
作为键。例如:
{$project:{record:“$$ROOT”}
我希望它能帮助您在mongoshell中所做的一切,您可以使用c#driver转换它并逐步构造查询文档step@AlexDenisov我认为这是驱动程序中的一个错误,它应该转化为你所说的。。。BRAHIMKamel:我知道这一点,但不幸的是,用BsonDocument语法构造查询非常复杂,而且不太直观。如果可能的话,我想坚持使用fluent api,因为它在其他方面工作得非常好。@Felheart只需给我们提供等效的Mongoquery@BRAHIMKamel这将是
{$project:{Player1:1,Player2:1,TimeStamp:1,…}
。这可以通过在新的匿名类型中包含源文档的所有字段来实现,但是对于根级别有许多字段的文档来说,这将是一项艰巨的工作。我看到还有
$addFields
操作符,它在mongo查询语法中实现了我想要的功能,但c#驱动程序似乎没有使用它。