2011-09-28 4 views
1

미안은/문서의 최대 개정을 찾을 줄일 수 있습니다.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 속성을 사용할 수 있습니다 (단,이 경우 한 문서에서) BsonDocument의 열거입니다

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

를 첫 번째 결과를 얻을.

나는 그러나지도를 사용 감소 방지, 최대 버전을 찾을 수있는 더 좋은 방법을 제안 : 다음 맵리 듀스는 당신이 원하는 경우 모든 문서에 대한 최대 개정을 얻기 위해, 결국,

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 

을 좋은 전화. 당신의 도움에 대한

+0

아주 좋은, 감사합니다. – TBach

+0

뿐만 아니라 절대 초보자의 질문 : 내가 InlineResults를 사용하는 경우, 내가 어떻게 값에 액세스 할 수 있습니까? BsonDocument의 열거 가능한 – TBach

+0

InlineResults이다 : 첫번째 및 GetValue ("값")을 취 – kamaradclimber