私は人々の集まりを持っています。私はそれぞれの名前のために一番古い人物を見つけようとしています。私はC#のドライバーのためのこれの同等とは何であるMongoDBのpushとrootに相当するC#は何ですか?
db.People.aggregate([
{ '$sort': { 'Name': 1, 'Age': -1 } },
{
'$group': {
'_id': '$Name',
'docs': { '$push': '$$ROOT' },
}
},
{
'$project': {
'top_one': {
'$slice': ['$docs', 1]
}
}
} ])
MongoDBのコンソールコマンドを使用して、その結果を達成することができていますか?私は、特にここで
'docs': { '$push': '$$ROOT' },
とのトラブルを抱えている私の現在のC#のクエリです:
collection.Aggregate(aggArgs)
.SortByDescending(x => x.Age)
.Group(x => x.Name, x => new {
Name = x.First().Name,
FavoriteColor = x.First().FavoriteColor,
FavoriteFood = x.First().FavoriteFood
}).ToListAsync().Result;
それは私のmongoコンソールコマンドが何をするのかに近い動作しますが、私は本当に構築する好きではないが匿名のオブジェクト。私はGroup(x => x.Name,x => x.First())
をやりたがっているが、 "First()"はサポートされていないという例外と例外がある。問題の一部は私の人型にIDがないので、_idは実際のmongoドキュメントに置かれます(挿入時に自動的にmongoによって)。型に戻ろうとすると、直接マッピングはできません。
したがって、2つのバージョンのクエリを念頭に置いて、完全な型をC#ですべてのフィールドを綴ることなく戻すにはどうすればよいですか?
いい仕事です!私にとってはちょっと馬鹿げた方法ですが、私はmongoドライバを使って、linqを使って休憩をとることができますが、それはあなたの選択です。あなたのデータがどれだけ大きいか分かりません。 –