public void GetMongoDBData() { var mongo = new Mongo(); mongo.Connect(); //Get the blog database. If it doesn't exist, that's ok because MongoDB will create it //for us when we first use it. Awesome!!! var db = mongo.GetDatabase("blog"); //Get the Post collection. By default, we'll use //the name of the class as the collection name. Again, //if it doesn't exist, MongoDB will create it when we first use it. var collection = db.GetCollection<Post>(); //this deletes everything out of the collection so we can run this over and over again. collection.Remove(p => true); //Create a Post to enter into the database. var post = new Post() { Title = "My First Post", Body = "This isn't a very long post.", CharCount = 27, Comments = new List<Comment> { { new Comment() { TimePosted = new DateTime(2010,1,1), Email = "*****@*****.**", Body = "This article is too short!" } }, { new Comment() { TimePosted = new DateTime(2010,1,2), Email = "*****@*****.**", Body = "I agree with Bob." } } } }; collection.Save(post); }
// public void testMapReduce(){//插入测试数据 //Mongo _db = new Mongo( "127.0.0.1" ).getDB( "jmrtest" ); //DBCollection c = _db.getCollection( "jmr" ); // c.drop(); // c.save( new BasicDBObject( "x" , new String[]{ "a" , "b" } ) ); // c.save( new BasicDBObject( "x" , new String[]{ "b" , "c" } ) ); // c.save( new BasicDBObject( "x" , new String[]{ "c" , "d" } ) ); // MapReduceOutput out = // c.mapReduce( "function(){ " + // "for( var i=0; i<this.x.length; i++ )" + // "{ emit(this.x[i] , 1 ); } }",//map函数内使用this来操作当前行表示的对象,并且使用emit(key,value)方法来向reduce提供参数: // "function(key,values){" + // " var sum=0; " + // "for( var i=0; i<values.length; i++ )" + // " sum += values[i];" + // " return sum;}" ,//reduce的key就是emit(key,value)的key,value_array是同个key对应的多个value数组: // "result" , null );//mapReduce 方法2.x以后和1.X不同 // Map<String,Integer> m = new HashMap<String,Integer>(); // for (DBObject element : out.results()) { // System.out.println(element.get("value")); // } // for ( DBObject r : out.results() ){ // System.out.println( ((Number)(r.get( "value" ))).intValue()); // m.put( r.get( "_id" ).toString() , ((Number)(r.get( "value" ))).intValue() ); // } // System.out.println(m.size()); // assertEquals( 4 , m.size() ); // assertEquals( 1 , m.get( "a" ).intValue() ); // assertEquals( 2 , m.get( "b" ).intValue() ); // assertEquals( 2 , m.get( "c" ).intValue() ); // assertEquals( 1 , m.get( "d" ).intValue() ); //} private static void CreatePosts(IMongoCollection<Post> collection) { var post = new Post() { Title = "My First Post", Body = "This isn't a very long post.", CharCount = 27, Comments = new List<Comment> { { new Comment() { TimePosted = new DateTime(2010,1,1), Email = "*****@*****.**", Body = "This article is too short!" } }, { new Comment() { TimePosted = new DateTime(2010,1,2), Email = "*****@*****.**", Body = "I agree with Bob." } } } }; //Save the post. This will perform an upsert. As in, if the post already exists, update it, otherwise insert it. collection.Save(post); //Get the first post that is not matching correctly... post = collection.Linq().First(x => x.CharCount != x.Body.Length); post.CharCount = post.Body.Length; //this will perform an update this time because we have already inserted it. collection.Save(post); post = new Post() { Title = "My Second Post", Body = "This still isn't a very long post.", CharCount = 34, Comments = new List<Comment> { { new Comment() { TimePosted = new DateTime(2010,1,1), Email = "*****@*****.**", Body = "This isn't any better" } }, } }; //Save the post. This will perform an upsert. As in, if the post already exists, update it, otherwise insert it. collection.Save(post); post = new Post() { Title = "My Third Post", Body = "Ok, fine. I'm writing a longer post so that Bob will leave me alone.", CharCount = 69, Comments = new List<Comment> { { new Comment() { TimePosted = new DateTime(2010,1,1), Email = "*****@*****.**", Body = "Yeah, well, you are a terrible blogger." } }, } }; //Save the post. This will perform an upsert. As in, if the post already exists, update it, otherwise insert it. collection.Save(post); }