2011-09-28 72 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