Csharp/C#教程:在MongoDB C#中展开组聚合分享


在MongoDB C#中展开组聚合

我在使用新的C#2.0 MongoDB驱动程序和聚合管道时遇到了一些麻烦。

基本上,我试图返回对象上数组字段中最受欢迎的元素。 字段类型为: IList FavouritePlaceIds { get; set; } IList FavouritePlaceIds { get; set; } IList FavouritePlaceIds { get; set; }

我有以下MongoDB聚合,它按预期工作:

 db.users.aggregate([ { $unwind : "$FavouritePlaceIds" }, { $group: { "_id": "$FavouritePlaceIds", "count": {$sum: 1}}}, { $sort : { "count": -1 }} ]) 

但是,现在的问题是尝试使用新的MongoDB驱动程序2.0将其转换为C#代码。 我一直在使用以下链接获取有关聚合管道的帮助: http : //mongodb.github.io/mongo-csharp-driver/2.0/reference/driver/crud/reading/#unwind

到目前为止,我已经为我的聚合管道提供了以下内容:

 var pipeline = usersCollection.Aggregate() .Unwind(i => i.FavouritePlaceIds) .Group(i => i.FavouritePlaceIds, g => new { FavouritePlaceIds = g.Key, Count = g.Count() }) .SortByDescending(i => i.Count); 

当我去编译该代码时,我得到以下消息:

‘BsonDocument’不包含’FavouritePlaceIds’的定义,并且没有扩展方法’FavouritePlaceIds’接受’BsonDocument’类型的第一个参数可以找到…

Group()方法的第一个参数( i => i.FavouritePlaceIds )发生错误。

阅读小组部分提供的链接上的笔记,它提到:

因为$ unwind是一种投影,所以必须提供返回类型。

所以,我假设我没有指定正确的返回类型,这就是为什么它期望一个BsonDocument对象,并且无法编译。

那么,如何指定要在Group方法中使用的正确返回类型?

当你让Unwind推断出类型参数时,它将使用TResult的集合类型和BsonDocumentTNewResult

如果要使用特定类型而不是BsonDocument ,则需要添加以下类型参数:

 var pipeline = usersCollection.Aggregate() .Unwind(.... 

与往常一样,您需要确保操作实际返回可能属于该类型的内容。

上述就是C#学习教程:在MongoDB C#中展开组聚合分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

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

ctvol管理联系方式QQ:251552304

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

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐