Juz*_*ott 9 c# mongodb mongodb-csharp-2.0 mongodb-.net-driver
我在使用新的C#2.0 MongoDB驱动程序和聚合管道时遇到了一些麻烦.
基本上,我试图返回对象上数组字段中最受欢迎的元素.字段类型是:IList<string> FavouritePlaceIds { get; set; }
.
我有以下MongoDB聚合,它按预期工作:
db.users.aggregate([
{ $unwind : "$FavouritePlaceIds" },
{ $group: { "_id": "$FavouritePlaceIds", "count": {$sum: 1}}},
{ $sort : { "count": -1 }}
])
Run Code Online (Sandbox Code Playgroud)
但是,现在的问题是尝试使用新的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);
Run Code Online (Sandbox Code Playgroud)
当我去编译该代码时,我得到以下消息:
'BsonDocument'不包含'FavouritePlaceIds'的定义,并且没有扩展方法'FavouritePlaceIds'接受类型'BsonDocument'的第一个参数可以找到...
i => i.FavouritePlaceIds
Group()方法的第一个参数()发生错误.
阅读小组部分提供的链接上的笔记,它提到:
因为$ unwind是一种投影,所以必须提供返回类型.
所以,我假设我没有指定正确的返回类型,这就是为什么它期望一个BsonDocument对象,并且无法编译.
那么,如何指定要在Group方法中使用的正确返回类型?
当你Unwind
推断出类型参数时,它将使用for TResult
和BsonDocument
for 的集合类型TNewResult
.
如果要使用特定类型而不BsonDocument
需要添加这些类型参数:
var pipeline = usersCollection.Aggregate()
.Unwind<OriginalType, NewResultType>(....
Run Code Online (Sandbox Code Playgroud)
与往常一样,您需要确保操作实际上返回可以是该类型的内容.
归档时间: |
|
查看次数: |
8419 次 |
最近记录: |