C# mongodb投影中的别名字段

C# mongodb投影中的别名字段,c#,mongodb,C#,Mongodb,在mongo projections中,可以在输出中包含或排除字段: { IncludetField: 1, ExcludedField: 0 } 使用ProjectOnDefinitionBuilder方法Include和Exclude,可以在c中轻松创建这些投影 MongoDb还允许使用别名字段: { alias: "$IncludedField" } 但我还没有找到一个不回到弦的好方法: _collection.Aggregate() .Match(...)

在mongo projections中,可以在输出中包含或排除字段:

{
   IncludetField: 1,
   ExcludedField: 0
}
使用ProjectOnDefinitionBuilder方法Include和Exclude,可以在c中轻松创建这些投影

MongoDb还允许使用别名字段:

{
   alias: "$IncludedField"
}
但我还没有找到一个不回到弦的好方法:

_collection.Aggregate()
   .Match(...)
   .Project("{alias: '$IncludedField'}");
这很快就会变得相当混乱。在该投影中添加一个$filter,您很快就会得到一个相当复杂的字符串,而根本没有编译器的帮助

我忽略了什么吗?或者就是这样吗?

这应该可以:

_collection.Aggregate()
   .Match(...)
   .Project(x => new { alias = x.IncludedField });
这应该起作用:

_collection.Aggregate()
   .Match(...)
   .Project(x => new { alias = x.IncludedField });

这取决于你想要什么。如果你提到$filter,它可能会帮助你在这里更具体。使用AsQueryable表达式,您可以执行如下操作:从内存中选择p=>new{alias=p.IncludedField},作为不在IDE前面。实际上,您可能在谈论为管道动态构建BSON文档输入,因为这是我们在更动态的语言中所做的事情,也有很多方法可以做到这一点。给这只猫剥皮的方法太多了,如果你能更严格地表达你的意图,问题就会更清楚。我没有考虑林克。我试图避开它,因为根据我的经验,太多的开发人员没有对服务器上执行的内容和本地执行的内容保持足够的关注。已经发现了太多的例子,其中有人在聚合的中间插入toSoad或类似的东西,导致内存中有一半的DB被拉扯和迭代…….SELECT表达式似乎对非LINQ聚合变体也是有效的,而且实际上会让我走得很远。不过,对于如何合并$filter步骤仍然有点不确定……这就是我要求具体说明的原因。所以还不清楚你的意思。正如我所说,基本的别名很简单,您当然不需要字符串来完成$filter之类的工作。本质上,{=}在每个构建器阶段和嵌套级别中都非常有效。BSON文档可以动态构造。这似乎是你遗漏的一点,但还不清楚。如果你只是想要基本的别名,那么你已经得到了答案。当你不确定自己在做什么时,表达你想要什么并不总是那么容易:-某种程度上取决于你想要什么。如果你提到$filter,它可能会帮助你在这里更具体。使用AsQueryable表达式,您可以执行如下操作:从内存中选择p=>new{alias=p.IncludedField},作为不在IDE前面。实际上,您可能在谈论为管道动态构建BSON文档输入,因为这是我们在更动态的语言中所做的事情,也有很多方法可以做到这一点。给这只猫剥皮的方法太多了,如果你能更严格地表达你的意图,问题就会更清楚。我没有考虑林克。我试图避开它,因为根据我的经验,太多的开发人员没有对服务器上执行的内容和本地执行的内容保持足够的关注。已经发现了太多的例子,其中有人在聚合的中间插入toSoad或类似的东西,导致内存中有一半的DB被拉扯和迭代…….SELECT表达式似乎对非LINQ聚合变体也是有效的,而且实际上会让我走得很远。不过,对于如何合并$filter步骤仍然有点不确定……这就是我要求具体说明的原因。所以还不清楚你的意思。正如我所说,基本的别名很简单,您当然不需要字符串来完成$filter之类的工作。本质上,{=}在每个构建器阶段和嵌套级别中都非常有效。BSON文档可以动态构造。这似乎是你遗漏的一点,但还不清楚。如果你只需要基本的别名,那么你已经找到了答案。当你不确定自己在做什么时,表达你想要的并不总是那么容易:-