MongoDB C # отобразить элемент - PullRequest
       26

MongoDB C # отобразить элемент

1 голос
/ 28 сентября 2011

Я использую карту / уменьшить, чтобы найти максимальную версию документа.

 var map = "function() {emit(this.DocName, this.Revision);}";
 var reduce = "function (key,values) {return Math.max.apply(Math, values);}";
 QueryDocument Query = new QueryDocument("DocName", stFName);
 var mr = docs.MapReduce(Query, map, reduce).Response;

г-н содержит

{[{ "_id" : "WINWORD8.DOC", "value" : 2.0 }]}

Как можно использовать значение в качестве переменной?

Привет

Thomas

1 Ответ

2 голосов
/ 28 сентября 2011

Уменьшение карты можно рассматривать как избыточное количество для такого простого запроса.

Вы можете использовать свойство InlineResults:

docs.MapReduce(Query, map, reduce).InlineResults

, которое является перечислимым BsonDocument (в данном случае 1 документтолько) и получить первый результат.

Я бы, однако, предложил лучший способ найти максимальную ревизию, избегая использования карты уменьшить использование:

IMongoSortBy sort = SortBy.Descending("Revision");
IMongoQuery = Query.EQ("DocName", stFName);
BsonValue maxRev = docs.FindAs<BsonDocument>(q).SetFields(new string[] {"Revision"}).SetSortOrder(sort).SetLimit(1).GetFirstOrDefault()
if (maxRev !=null)
    int revMax = maxRev.AsBsonDocument.GetValue("Revision").AsInt32; // <- this is the maximum revision

Если вы хотите, в конце концов, чтобыполучите максимальную ревизию для всех ваших документов, тогда mapreduce - хороший вызов.

...