2 つのデータセットを結合するために、この例を次の方法で C#に変換しようとしました。
例と同じ結果を得るために適切なコード変更を提案できる人がいれば、非常に感謝しています。
2 つのデータセットを結合するために、この例を次の方法で C#に変換しようとしました。
例と同じ結果を得るために適切なコード変更を提案できる人がいれば、非常に感謝しています。
この例と同じ結果を生成するソリューションは次のとおりです。
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;
}";
}