2

2 つのデータセットを結合するために、この例を次の方法で C#に変換しようとしました。

例と同じ結果を得るために適切なコード変更を提案できる人がいれば、非常に感謝しています。

4

1 に答える 1

3

この例と同じ結果を生成するソリューションは次のとおりです。

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;
        }";
}
于 2012-12-25T15:11:27.653 に答える