2011-09-28 106 views
1

我使用map/reduce來查找文檔的最大修訂版本。MongoDB C#映射項目

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 }]} 

如何使用 '價值' 作爲變量?

問候

托馬斯

回答

2

地圖降低可以看作是矯枉過正這麼簡單的要求。

可以使用InlineResults屬性:

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

這是BsonDocument的枚舉(僅在這種情況下,1 DOC)和得到的第一個結果。

不過,我想提出一個更好的方法來找到最大的修訂,避免地圖降低用法:

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的是好決定。

+0

非常好,謝謝你的幫助。 – TBach

+0

但也從絕對初學者的問題: 如果我使用InlineResults,我如何訪問該值? – TBach

+0

InlineResults是BsonDocument的Enumerable:取第一個和GetValue(「value」) – kamaradclimber