簡體   English   中英

在MongoDB C#中展開組聚合

[英]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的集合類型和BsonDocumentTNewResult

如果要使用特定類型而不是BsonDocument ,則需要添加以下類型參數:

var pipeline = usersCollection.Aggregate()
    .Unwind<OriginalType, NewResultType>(....

與往常一樣,您需要確保操作實際上返回可以是該類型的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM