In order to join two datasets I tried to translate this example to C# the following way:
I would be very thankful if anyone of you could suggest the appropriate code modification in order to achieve the same result as the example.
In order to join two datasets I tried to translate this example to C# the following way:
I would be very thankful if anyone of you could suggest the appropriate code modification in order to achieve the same result as the example.
The solution which produces the same results as this example is the following:
class Program
{
static void Main(string[] args)
{
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("mr_demo");
var cLifeExpectancy = database.GetCollection("life_expectancy");
var cEconomicAssistance = database.GetCollection("us_economic_assistance");
var options = new MapReduceOptionsBuilder();
options.SetOutput(MapReduceOutput.Inline);
options.SetOutput(MapReduceOutput.Reduce("result"));
var result = cLifeExpectancy.MapReduce(life_expect_map, r, options);
result = cEconomicAssistance.MapReduce(us_econ_map, r, options);
foreach (var record in result.GetResults())
{
Console.WriteLine(record);
}
}
private static string life_expect_map =
@"function() {
// Simply emit the age and 0 for the dollar amount.
// The dollar amount will come from the other collection.
emit(this.country, {life_expectancy: this.age, dollars: 0});
}";
private static string us_econ_map =
@"function() {
// The data set contains grant amounts going back to 1946. I
// am only interested in 2009 grants.
if (this.FY2009 !== undefined && this.FY2009 !== null) {
emit(this.country_name, {
dollars: this.FY2009,
life_expectancy: 0
});
}
}";
private static string r =
@"function(key, values) {
var result = {dollars: 0, life_expectancy: 0};
values.forEach(function(value) {
// Sum up all the money from all the 2009 grants for this
// country (key)
result.dollars += (value.dollars !== null) ? value.dollars : 0;
// Only set life expectancy once
if (result.life_expectancy === 0 &&
value.life_expectancy !== null
) {
result.life_expectancy = value.life_expectancy;
}
});
return result;
}";
}