如何在C#中使用MapReduce加入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; }"; }