2016-07-11 8 views
0

を使用して最大のレコードを検索そこのような文書であると仮定しますTemplateとしてクラスにforeachの項目はmongodbcsharpドライバに

{ 
    "_id": "1cf2080c-ce9a-367b-93ba-dbf7b2bf8a2c", 
    "template_id" : "1cf2080c-ce9a-367b-93ba-dbf7b2bf8a2c", 
    "some_value" : 12 
} 

マッピングが、そしてれるtemplateId配列array_id = ["aa", "bb", "cc"]

質問与えられた:方法をTemplate mongodb C#driver2.1を使用してリストを取得できますか?リスト内の各アイテムは最大でsome_valueですか?

例えばコレクションがあります:

{"_id": "1", "template_id": "aa", "some_value":1} 

{"_id": "2", "template_id": "aa", "some_value":2} 

{"_id": "3", "template_id": "aa", "some_value":3} 

{"_id": "4", "template_id": "bb", "some_value":4} 

{"_id": "5", "template_id": "bb", "some_value":5} 

template_id_array = ["aa", "bb"]

は結果を期待している:

{"_id": "3", "template_id": "aa", "some_value":3} 

{"_id": "5", "template_id": "bb", "some_value":5} 

私はそれはいくつかの "集約" だと思うか、「MAP-減らします"手続きのように、最初に一致した結果をテンプレートIDでグループ化し、グループごとに最大値を見つけます。私はこれをテストしていませんが、

var result = new List<Template>(); 
foreach (var element in template_id_array) 
{ 
    var filter = builder.Eq("TemplateId", element); 
    var doc = await collection.Find(filter) 
    .SortByDescending(x => x.SomeValue) 
    .Limit(1) 
    .FirstOrDefaultAsync(); 
    result.Add(doc); 
} 

は、その後、あなたが最終的な形にそれをシリアライズすることができ、いくつかの可能性の修正で動作するはず

答えて

0

var expectedResult = JsonConvert.SerializeObject(result); 
+0

申し訳ありませんが私のポイントを明確にしないために、実際に私が希望LONGQではなく、ただ一つの行でmongodb "sql like"のようなクエリを使うのが好きです –

関連する問題