新しい C# 2.0 MongoDB ドライバーと集計パイプラインに問題があります。
基本的に、オブジェクトの配列フィールド内で最も人気のある要素を返そうとしています。フィールド タイプは次のとおり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」の定義が含まれておらず、タイプ「BsonDocument」の最初の引数を受け入れる拡張メソッド「FavouritePlaceIds」が見つかりませんでした...
i => i.FavouritePlaceIds
Group() メソッドの最初のパラメーター ( ) でエラーが発生しています。
グループセクションの下にあるリンクのメモを読むと、次のことが言及されています。
$unwind はプロジェクションの一種であるため、戻り値の型を指定する必要があります。
したがって、正しい戻り値の型を指定していないと想定しているため、BsonDocument オブジェクトが必要であり、コンパイルに失敗しています。
では、Group メソッドで使用する正しい戻り値の型を指定するにはどうすればよいでしょうか?