Mongo3.4.7与java1.8结合测试代码

1.下载mongo-java-driver-3.5.0.jar驱动并引入测试项目中。

2.代码如下:

package com.zzw.mongodb;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import org.bson.Document;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.DistinctIterable;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MapReduceIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	

		//插入
		//insert();
		
		//查询
		query();
		
		//更新
		//update();
		
		//删除
		//delete();
		
	}
	
	//有密码连接
	public static MongoDatabase connect1(){
        	//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址  
       		//ServerAddress()两个参数分别为 服务器地址 和 端口  
       		ServerAddress serverAddress = new ServerAddress("localhost",27017);  
        	List<ServerAddress> addrs = new ArrayList<ServerAddress>();  
        	addrs.add(serverAddress);  
          
        	//参数: 用户名 数据库名称 密码  
        	MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  
        	List<MongoCredential> credentials = new ArrayList<MongoCredential>();  
        	credentials.add(credential);  
          
        	//通过连接认证获取MongoDB连接  
        	MongoClient mongoClient = new MongoClient(addrs,credentials);
        	//参数:Collections名称
        	MongoDatabase db = mongoClient.getDatabase("databaseName");
		return db;  
	}
	
	//无密码连接
	public static MongoDatabase connect(){
		//连接到mongo数据库
		MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
		//获取某一数据库
		MongoDatabase db = mongoClient.getDatabase("test");
		return db;
	}
	//插入
	public static void insert(){
		//连接到数据库
		MongoDatabase db = connect();
		//获取某一集合	
		MongoCollection<Document> collection = db.getCollection("user");
		//时间格式
		SimpleDateFormat s=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		Calendar cal=Calendar.getInstance();
		//插入单个文档
		Document doc = new Document();
		doc.put("name", "zhangsan");
		doc.put("age", 5);
		doc.put("sex", "男");
		doc.put("time", s.format(cal.getTime()));
		collection.insertOne(doc);
		//插入多个文档
		List<Document> docs = new LinkedList<Document>();
		for(int i=0; i<25; i++){
		    Document doc1 = new Document();
		    doc1.put("name", "zhangsan"+(i+1));
		    doc1.put("age", 6+i);
		    if(i % 2 == 0){
				doc1.put("sex", "男");
		    }
		    else{
				doc1.put("sex", "女");
		    }
			doc1.put("time", s.format(cal.getTime()));
		    docs.add(doc1);
		}
		collection.insertMany(docs);
		System.out.println("插入成功");
	}
	
	//更新
	public static void update(){
		//连接到数据库
		MongoDatabase db = connect();
		//获取某一集合	
		MongoCollection<Document> collection = db.getCollection("user");
		//更新全部。更新单个使用collection.updateOne(arg0, arg1)方法
		collection.updateMany(Filters.gt("age",4),new Document("$set",new Document("time","2017/08/24 19:51:48")));
        //检索查看结果  
        FindIterable<Document> findIterable = collection.find();  
        MongoCursor<Document> mongoCursor = findIterable.iterator();  
        while(mongoCursor.hasNext()){  
           System.out.println(mongoCursor.next());  
        }  
        System.out.println("更新成功");
	}
	
	//删除
	public static void delete(){
		//连接到数据库
		MongoDatabase db = connect();
		//获取某一集合	
		MongoCollection<Document> collection = db.getCollection("user");
        //删除符合条件的第一个文档  
        collection.deleteOne(Filters.gt("age", 4));  
        //删除所有符合条件的文档  
        collection.deleteMany (Filters.gt("age", 4));  
        System.out.println("删除成功");
	}
	
	//查询
	public static void query(){
		//连接到mongo数据库
		MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
		//获取某一数据库
		MongoDatabase db = mongoClient.getDatabase("test");
		//获取某一集合	
		MongoCollection<Document> collection = db.getCollection("user");
		//输出集合内所有元素
		FindIterable<Document> documents = collection.find();
		for (Document document : documents) {
		    System.out.println(document);
		}
		//count()函数可以加 条件,参数形式可以是document或Filters
		long cnt=collection.count();
		System.out.println("共有"+cnt+"条记录");
		
	
		//查找所有name = zhangsan的document
		//Document query1 = new Document("name", "zhangsan");
		//FindIterable<Document> documents1 = collection.find(query1);
		//使用filter查询 :eq ne lt gt lte gte and or in
		FindIterable<Document> documents1 = collection.find(Filters.eq("name", "zhangsan"));
		for (Document d : documents1) {
		    System.out.println(d.toJson());
		}
		
		//and 查询
		//Document query2 = new Document("age", new Document("$lt", 25)).append("name", "zhangsan");
		//FindIterable<Document> documents2 = collection.find(query2);  
		FindIterable<Document> documents2 = collection.find(Filters.and(Filters.eq("name", "zhangsan"),Filters.lt("age", 25)));
		for (Document d : documents2) {
		    System.out.println(d.toJson());
		}
		
		//or 查询
		//Document query3 = new Document("$or", Arrays.asList(new Document("name", "zhangsan"), new Document("name", "zhangsan1")));
		//FindIterable<Document> documents3 = collection.find(query3);
		FindIterable<Document> documents3 = collection.find(Filters.or(Filters.eq("name", "zhangsan"),Filters.lt("name", "zhangsan1")));
		for (Document d : documents3) {
		    System.out.println(d.toJson());
		}

		//between and 查询
		Document query4 = new Document("age", new Document("$lt", 23).append("$gt", 20));
		FindIterable<Document> documents4 = collection.find(query4);    
		for (Document d : documents4) {
		    System.out.println(d.toJson());
		}
		
		FindIterable<Document> documents5 = collection.find(Filters.in("age", Arrays.asList(16,18,20)));
		for (Document d : documents5) {
		    System.out.println(d.toJson());
		}
		
		//按name升序,name相同的按age降序
		FindIterable<Document> documents6 = collection.find().sort(Sorts.orderBy(Sorts.ascending("name"), Sorts.descending("age")));
		for (Document d : documents6) {
		    System.out.println(d.toJson());
		}		
		
		//skip()跳过,limit()限制,常用于分页显示。跳过前5条(0-4),返回(5-9)共5条。
		FindIterable<Document> documents7 = collection.find().sort(Sorts.descending("age")).skip(5).limit(5);
		for (Document d : documents7) {
		    System.out.println(d.toJson());
		}		
		
		System.out.println("ssss");
		//distinct:去重   
		DistinctIterable<String> name = collection.distinct("name", String.class);
		MongoCursor<Integer> c = collection.distinct("age",Integer.class).iterator();
		for (String s : name) {
		    System.out.println(s);
		}
		
		//沒有条件
		AggregateIterable<Document> aggregate = collection.aggregate(Arrays.asList(
				new Document("$project", new Document("name", 1).append("_id", 0).append("age", 1).append("sex", 1).append("time", 1))
				,new Document("$group", new Document("_id", "$time").append("avg", new Document("$avg", "$age")).append("first", new Document("$first", "$name")))
				));

		for (Document document : aggregate) {
		    System.out.println(document.toJson());
		}
		
		//加入条件
		System.out.println("加入条件后聚合:");
		AggregateIterable<Document> aggregate1 = collection.aggregate(Arrays.asList(
				new Document("$project", new Document("name", 1).append("_id", 0).append("age", 1).append("sex", 1).append("time", 1))
				,new Document("$match", new Document("age",new Document("$lt", 20).append("$gt", 7)))
				,new Document("$group", new Document("_id", "$time").append("avg", new Document("$avg", "$age")).append("first", new Document("$first", "$name")))
				));
		for (Document document : aggregate1) {
		    System.out.println(document.toJson());
		} 
		
		//map reduce
		String map = "function() { "+   
	             "var category; " +    
	             "if ( this.age >= 18 ) "+    
	             "category = '青年'; " +  
	             "else " +  
	             "category = '少年'; "+    
	             "emit(category, {name: this.name});}";  
	     
	   String reduce = "function(key, values) { " +  
	                            "var sum = 0; " +  
	                            "values.forEach(function(doc) { " +  
	                            "sum += 1; "+  
	                            "}); " +  
	                            "return {count: sum};} ";  
	   
	   
	   MapReduceIterable<Document> mr=collection.mapReduce(map, reduce);
	   for (Document o : mr) {  
		    System.out.println(o.toJson());  
		   }  
	}
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值