基本信息
源码名称:C# mongodb map reduce 计算 实例源码下载
源码大小:1.47M
文件格式:.zip
开发语言:C#
更新时间:2014-12-24
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

mongodb map-reduce计算 源码

主要参考: 

http://docs.mongodb.org/manual/tutorial/map-reduce-examples/

http://odetocode.com/blogs/scott/archive/2012/03/19/a-simple-mapreduce-with-mongodb-and-c.aspx



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;

namespace MongoDBWinDemo
{
    public partial class MapReduceForm2 : Form
    {
        public MapReduceForm2()
        {
            InitializeComponent();
        }



        public class Movie
        {
            public string Title { get; set; }
            public string Category { get; set; }
            public int Minutes { get; set; }
        }

        public MongoCollection<T> GetCollection<T>()
        {

            //var connectionString = "mongodb://localhost";
            //var client = new MongoClient(connectionString);
            //var server = client.GetServer();
            //var database = server.GetDatabase("test");
            //var collection = database.GetCollection<Entity>("entities");

            var connectionString = "mongodb://localhost";
            var client = new MongoClient(connectionString);
            var server = client.GetServer();
            var database = server.GetDatabase("test");
            var collection = database.GetCollection<T>("movies");
            return collection;
        }

        private void AddMovies(MongoCollection<Movie> collection)
        {
            var movies = new List<Movie>
            {
                new Movie
                {
                    Title = "The Perfect Developer",
                    Category = "SciFi",
                    Minutes = 118
                },
                new Movie
                {
                    Title = "Lost In Frankfurt am Main",
                    Category = "Horror",
                    Minutes = 122
                },
                new Movie
                {
                    Title = "The Infinite Standup",
                    Category = "Horror",
                    Minutes = 341
                }
            };
            collection.InsertBatch(movies);
        }

        private void btnCal_Click(object sender, EventArgs e)
        {
            string map = @"
            function() {
                var movie = this;
                emit(movie.Category, { count: 1, totalMinutes: movie.Minutes });
            }";

            string reduce = @"        
            function(key, values) {
                var result = {count: 0, totalMinutes: 0 };

                values.forEach(function(value){               
                    result.count  = value.count;
                    result.totalMinutes  = value.totalMinutes;
                });

                return result;
            }";

            string finalize = @"
            function(key, value){
      
              value.average = value.totalMinutes / value.count;
              return value;

            }";
            //var collection = db.GetCollection("movies");
            var collection = this.GetCollection<Movie>();
            AddMovies(collection);
            var options = new MapReduceOptionsBuilder();
            options.SetFinalize(finalize);
            options.SetOutput(MapReduceOutput.Inline);
            var results = collection.MapReduce(map, reduce, options);

            foreach (var result in results.GetResults())
            {
                //Console.WriteLine(result.ToJson());
                MessageBox.Show(result.ToJson());
            }
        }
    }
}