public void TestMapReduceInline()
{
// this is Example 1 on p. 87 of MongoDB: The Definitive Guide
// by Kristina Chodorow and Michael Dirolf
if (_server.BuildInfo.Version >= new Version(1, 7, 4, 0))
{
_collection.RemoveAll();
_collection.Insert(new BsonDocument { { "A", 1 }, { "B", 2 } });
_collection.Insert(new BsonDocument { { "B", 1 }, { "C", 2 } });
_collection.Insert(new BsonDocument { { "X", 1 }, { "B", 2 } });
var map =
"function() {\n" +
" for (var key in this) {\n" +
" emit(key, {count : 1});\n" +
" }\n" +
"}\n";
var reduce =
"function(key, emits) {\n" +
" total = 0;\n" +
" for (var i in emits) {\n" +
" total += emits[i].count;\n" +
" }\n" +
" return {count : total};\n" +
"}\n";
var result = _collection.MapReduce(map, reduce);
Assert.IsTrue(result.Ok);
Assert.IsTrue(result.Duration >= TimeSpan.Zero);
Assert.AreEqual(9, result.EmitCount);
Assert.AreEqual(5, result.OutputCount);
Assert.AreEqual(3, result.InputCount);
Assert.IsNullOrEmpty(result.CollectionName);
var expectedCounts = new Dictionary<string, int>
{
{ "A", 1 },
{ "B", 3 },
{ "C", 1 },
{ "X", 1 },
{ "_id", 3 }
};
// test InlineResults as BsonDocuments
foreach (var document in result.InlineResults)
{
var key = document["_id"].AsString;
var count = document["value"]["count"].ToInt32();
Assert.AreEqual(expectedCounts[key], count);
}
// test InlineResults as TestInlineResultDocument
foreach (var document in result.GetInlineResultsAs<TestMapReduceDocument>())
{
var key = document.Id;
var count = document.Value.Count;
Assert.AreEqual(expectedCounts[key], count);
}
// test GetResults
foreach (var document in result.GetResults())
{
var key = document["_id"].AsString;
var count = document["value"]["count"].ToInt32();
Assert.AreEqual(expectedCounts[key], count);
}
// test GetResultsAs<>
foreach (var document in result.GetResultsAs<TestMapReduceDocument>())
{
Assert.AreEqual(expectedCounts[document.Id], document.Value.Count);
}
}
}