2016-07-11 8 views
0

Angenommen, es ist ein Dokument wie:foreach Element in einem Array findet größte Platten mongodbcsharp Treiber

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

Zuordnung zu einer Klasse als Template und einem TemplateID Array gegeben array_id = ["aa", "bb", "cc"]

Frage: wie kann ich eine Template Liste mit mongodb C# driver2.1 up, die jedes Element in der Liste haben größten some_value?

zum Beispiel gibt es eine Sammlung:

{"_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} 

und ein template_id_array = ["aa", "bb"]

Ergebnis erwarten ist:

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

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

ich denke, es einige "Aggregat" oder „Karte-reduzieren wäre "Wie bei der Prozedur, zuerst das Ergebnis abgleichen und dann nach der Template-ID gruppieren und dann den maximalen Wert für jede Gruppe finden.

Antwort

0

ich dies nicht getestet, soll aber

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); 
} 

Dann mit einigen wahrscheinlichen Änderungen arbeiten Sie es in der endgültigen Form serialisiert werden können:

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

sorry für nicht meinen Punkt klar zu machen, würde ich tatsächlich mag eine mongodb "sql like" Abfrage in nur einer Zeile verwenden, nicht linq –

Verwandte Themen