Csharp/C#教程:$ project或$ group不支持分享


$ project或$ group不支持

我正在尝试使用投影运行聚合但我得到NotSupportedException: $project or $group does not support 。 我正在使用mongodb v3.4运行2.4.4版本的驱动程序。

 var filter = Builders.Filter.Regex(x=>x.Value,"/test/gi"); var aggregate = collection.Aggregate() .Match(filter) .Project(x => new { Idx = x.Value.IndexOf("test"), Result = x }) .SortBy(x => x.Idx); 

我认为支持 IndexOfCP

我在这做错了什么?

问题不是由IndexOf引起的,而是由您的预测引起的。 投影不应该包含文档本身,这只是MongoDB .Net驱动程序不支持。 因此,以下查询不包括x对象到投影将工作正常:

 var aggregate = collection.Aggregate() .Match(filter) .Project(x => new { Idx = x.Value.IndexOf("test"), // Result = x }) .SortBy(x => x.Idx); 

这里有几种可能的修复方法。 最好的选择是在投影中不包括整个文档,而只包括进一步逻辑实际需要的字段,例如:

 var aggregate = collection.Aggregate() .Match(filter) .Project(x => new { Idx = x.Value.IndexOf("test"), Value = x.Value, // ... }) .SortBy(x => x.Idx); 

但是,如果您需要文档对象本身,则可以将整个集合提取到客户端,然后使用LINQ对象:

 var aggregate = collection.Aggregate() .Match(filter) .ToList() .Select(x => new { Idx = x.Value.IndexOf("test"), Result = x }) .OrderBy(x => x.Idx); 

使用此方法作为最后一个选项,因为它会严重加载服务器和客户端。

上述就是C#学习教程:$ project或$ group不支持分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1021615.html

(0)
上一篇 2022年1月6日
下一篇 2022年1月6日

精彩推荐