[英]Unwind then Group aggregation in MongoDB C#
我在使用新的C#2.0 MongoDB驅動程序和聚合管道時遇到了一些麻煩。
基本上,我試圖返回對象上數組字段中最受歡迎的元素。 字段類型為: IList<string> FavouritePlaceIds { get; set; }
IList<string> FavouritePlaceIds { get; set; }
IList<string> 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
的集合類型和BsonDocument
的TNewResult
。
如果要使用特定類型而不是BsonDocument
,則需要添加以下類型參數:
var pipeline = usersCollection.Aggregate()
.Unwind<OriginalType, NewResultType>(....
與往常一樣,您需要確保操作實際上返回可以是該類型的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.