MongoDB c#映射一个Item

本文关键字:一个 Item 映射 MongoDB | 更新日期: 2023-09-27 18:10:00

我正在使用map/reduce查找文档的最大修订数。

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

如何使用'value'作为变量?

托马斯

MongoDB c#映射一个Item

对于这样一个简单的请求,Map reduce可能被认为是多余的。

你可以使用inlinerresults属性:

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

,它是BsonDocument的一个可枚举对象(在本例中只有1个doc),并获得第一个结果。

然而,我建议一个更好的方法来找到最大修订,避免使用map reduce:

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是一个很好的调用。