2013-06-21 3 views
0

Полный метод должен быть универсальным, какКак получить максимальное значение поля от Монго курсора в C#

public string strGetMaxValue(string strDBName, string strCollectionName, string strKey) 
{ 
// in this method if pass some prms it should give max value 
} 

Один я попытался это

string strMaxValue = "";    
     MongoServer objServer = this.ConnectToServer(); 
     if ((strDBName != null || strDBName != "") && (strCollectionName != null || strCollectionName != "")) 
     { 
      string[] strArrays = new string[1]; 
      strArrays[0] = strKey; 
      //MongoCursor<BsonDocument> objCursor = objServer.GetDatabase(strDBName).GetCollection(strCollectionName).Find(query).SetSortOrder(SortBy.Descending(strArrays)).SetLimit(1); 

      var objCursor = objServer.GetDatabase(strDBName).GetCollection(strCollectionName).FindAll().SetSortOrder(SortBy.Descending(strArrays)).SetLimit(1).ToArray(); 


     } 

В этом objCursor им, что получить документ, который мне нужен. Я хочу извлечь это значение поля и отправить его в качестве возвращаемого параметра.

Метод должен быть общим как таковым, значение ключа может также поле в вложенном документе.

как достичь этого.?

ответ

0

Метод, который вы ищете, это SetFields(params string[] fields) - его можно вызывать на курсоре. Он ограничит ваш результирующий набор только полями, которые вы передаете (массив), а также идентификатором. Затем вы можете проиндексировать поле, используя []

 var result = server 
      .GetDatabase(strDBName) 
      .GetCollection(strCollectionName) 
      .FindAll() 
      .SetSortOrder(SortBy.Descending(new [] {strKey})) 
      .SetFields(new [] {strKey}) // The way to wrap something in an array for reference 
      .SetLimit(1) 
      .FirstOrDefault(); // Will return null if there are no rows 

     // There is a chance that we have no results 
     if (result != null) 
      // You might want to make sure this is a string/add the datatype 
      // as a Generic T to your function 
      return result[strKey].AsString; 
     else 
      return null;