zoukankan      html  css  js  c++  java
  • mongodb之增删改查

    概述

    该类是emessage自定义的一个类,用于对mongodb进行操作,可以对mongodb进行插入,修改与删除。该类是一个单例

    方法

    构造方法

    该类主要用来设置一些连接参数,与设置用户名和密码(如果需要),并获取对应的数据库

    private MongoManager() {
            //这里设置了MongoClient连接池的各种配置
    		 MongoClientOptions options = MongoClientOptions.builder()  
    	                .connectionsPerHost(MongoConfig.connectionsPerHost)  
    	                .maxWaitTime(MongoConfig.maxWaitTime) 
    	                .socketTimeout(MongoConfig.socketTimeout)  
    	                .maxConnectionLifeTime(MongoConfig.maxConnectionLifeTime)  
    	                .connectTimeout(MongoConfig.connectTimeout).build();
    		 //使用身份验证a
    		 if(MongoConfig.authentication.equals("1")){
    		     //createMongoCRCredential是使用身份验证的方法
    			 	List<MongoCredential> lstCredentials = Arrays.asList(MongoCredential.createMongoCRCredential(  
    			            MongoConfig.username, "emessage", MongoConfig.password.toCharArray()));
    			 	//通过传入lstCredentials来传入身份验证
    	       		mg = new MongoClient(new ServerAddress(MongoConfig.host,MongoConfig.port),lstCredentials,options);  
        	  }else{
        		  mg = new MongoClient(new ServerAddress(MongoConfig.host,MongoConfig.port),options);  
        	  }
        	  //获取对应的数据库
    	      mongoDatabase = mg.getDatabase("emessage");
        }
    

    getInstance方法

     public static MongoManager getInstance() {  
        	if(instance==null){
        		int ret = MongoConfig.loadMongoConfig();
            	if (0 != ret) {
            		return null;
            	 }else{
            		instance = new MongoManager(); 
            		instance.initMongo();
            	 }
        	}
            return instance;  
        }  
    

    该方法控制该类是一个单例,如果ret=0,则读取配置文件正常,initMongo,则是获取对应数据库中的所有集合。
    该方法获取一个MongoManager对象,并获取对应数据库中的所有集合

    initMongo方法

    private void initMongo(){
        	MongoCollection<Document> collection = mongoDatabase.getCollection(MongoColl.HISTORYMSG.text);
        	}
    

    表示获取MongoColl.HISTORYMSG.text数据库中的所有集合

    getCollection(MongoColl mongoColl)方法

    通过传入的集合名获取给定的集合

     public MongoCollection<Document> getCollection(MongoColl mongoColl) {
            //获取给定的集合
            MongoCollection<Document> collection = mongoDatabase.getCollection(mongoColl.text);
            return collection;
        }
    

    向mongodb添加数据

    向数据库对应的集合中插入一条数据

     public void insertDocument(MongoColl mongoColl,Document document){
        	MongoCollection<Document> coll  = getCollection(mongoColl);
        	//向数据库中插入一条数据
        	coll.insertOne(document);
        }
    

    应用
    插入一条数据

    Document document = new Document();
    document.put("name", "wyj");
    document.put("sex", "1");
    MongoManager m = MongoManager.getInstance();
    m.insertDocument(MongoManager.MongoColl.HISTORYMSG, document);
    
     public static enum MongoColl {  
        	  HISTORYMSG("emessage"), HISTORYMSGRESENTLY("historymsgresently"),SOCIALHISTORYMSGRIGHT("social_historymsgright");
              private final String text;
              private MongoColl(final String text){
                  this.text=text;
              }
              public String getText(){
            	  return text ;
              }
        } 
    

    批量插入数据

    public void insertDocuments(MongoColl mongoColl,List<Document> documents){
        	MongoCollection<Document> coll  = getCollection(mongoColl);
        	coll.insertMany(documents);
        }
    

    应用

    public void insert(){
    
    		MongoManager mongoManager = MongoManager.getInstance();
    		List<Document> list = new ArrayList<>();
    
    		String name = "huye";
    		String age = "";
    
    		for (int i=0; i<10; i++){
    			Document document = new Document();
    			age = String.valueOf(10+Math.random()*20);
    			document.put("name",name);
    			document.put("age",age);
    			list.add(document);
    		}
    		//批量插入
    		mongoManager.insertDocuments(MongoManager.MongoColl.HISTORYMSG,list);
    
    	}
    

    更新mongodb中的数据

    public UpdateResult update(MongoColl mongoColl,Bson filter,Bson update){
        	MongoCollection<Document> coll = mongoDatabase.getCollection(mongoColl.text);
        	coll.updateMany(filter, update) ;
        	return coll.updateMany(filter, update);
        }
    

    应用

    public void update(){
    		MongoManager mongoManager = MongoManager.getInstance();
    		//这里讲包含name字段的数据,有sex就将sex修改为"sex" : { "sex" : "1" },没有改字段则新加一个改字段
    		//Document document = new Document("$set",new Document("sex",new Document("sex","1")));
    		//UpdateResult updateResult = mongoManager.update(MongoManager.MongoColl.HISTORYMSG,Filters.exists("name",true),document);
    		//这里讲sex的内容修改为222
    		Document document = new Document("$set",new Document("sex","222"));
    		UpdateResult updateResult = mongoManager.update(MongoManager.MongoColl.HISTORYMSG,Filters.exists("name",true),document);
    
    		System.out.println("修改值的数目:"+updateResult.getUpsertedId());
    		}
    

    更新操作符

    Java中可以通过updateOne,updateMany,replaceOne方法进行集合的文档更新。但是 _id 是不能更新的

    updateOne只会更新一条数据,即使通过Filters.lt("age", 20)过滤出多条数据,也只会取出一条进行更新

    名称 描述
    $inc 增加一个指定值
    $mul 乘以一个指定值
    $rename 重命名
    $setOnInsert 更新操作对现有的文档没有影响,而是新插入了一个文档,则在这新插入的文档中加上指定字段
    $set 修改值
    $unset 删除文档中指定字段
    $min 更新文档中小于指定值的字段
    $max 更新文档中大于指定值的字段
    $currentDate 设置当前时间,日期或者时间戳

    $set

    只修改指定字段值,当字段不存在时,则在该文档中添加一个新的字段并赋值

    doc.updateOne(Filters.eq("age", 20), new Document("$set",new Document("sex",2222)));
    FindIterable iter1 = doc.find();
    iter1.forEach(new Block() {
      public void apply(Document _doc) {
        System.out.println(_doc.toJson());
      }
    });

    $inc

    对指定字段进行增量增加,当字段不存在时,则在该文档中添加字段并赋值

    doc.updateOne(Filters.eq("name", "张三"), new Document("$inc",new Document("age",10)));
    FindIterable iter = doc.find();
    iter.forEach(new Block() {
      public void apply(Document _doc) {
        System.out.println(_doc.toJson());
      }
    });

    $mul

    $mul的用法与$inc的用法差不多,差别在于$mul为相乘,$inc为相加,若字段不存在,添加字段并赋值为0

    $rename

    修改document的字段名

    doc.updateOne(Filters.eq("name", "张三"), new Document("$rename",new Document("phone","telPhone")));
    FindIterable iter = doc.find();
    iter.forEach(new Block() {
      public void apply(Document _doc) {
        System.out.println(_doc.toJson());
      }
    });

    删除mongodb中的数据

    public DeleteResult remove(MongoColl mongoColl, Bson filter) {
        	MongoCollection<Document> coll = mongoDatabase.getCollection(mongoColl.text);
            return coll.deleteMany(filter);
        }
    

    应用

    public void remove(){
    		MongoManager mongoManager = MongoManager.getInstance();
    
    		DeleteResult deleteResult = mongoManager.remove(MongoManager.MongoColl.HISTORYMSG,Filters.eq("name","huye"));
    
    		System.out.println("删除数据条数:"+deleteResult.getDeletedCount());
    	}
    

    查找数据

     public MongoCursor<Document> find(MongoColl mongoColl, Bson filter) {
            //通过传入的集合名找到对应的集合
        	MongoCollection<Document> coll = mongoDatabase.getCollection(mongoColl.text);
        	//通过传入的filter,来查找集合内对应的内容
            return coll.find(filter).iterator();
        }
    
        //表示按照Bson字段排序,取值为Sorts.ascending(_id):表示按照_id字段升序
        //limit:表示显示几列数据
        public MongoCursor<Document> find(MongoColl mongoColl, Bson filter,Bson sort,int limit) {
        	MongoCollection<Document> coll = mongoDatabase.getCollection(mongoColl.text);
        	return coll.find(filter).sort(sort).limit(limit).iterator() ;
        }
    

    应用

    public void find(){
    		MongoManager mongoManager = MongoManager.getInstance();
    
    		  // 该类通过排序来查找对应的数据
    		 //	 Sorts.ascending(_id):表示按照_id字段升序
    		 //	 2:表示显示两列数据
    		String _id = "_id";
    		//MongoCursor mongoCursor = MongoManager.getInstance().find(MongoManager.MongoColl.HISTORYMSG,Filters.eq("name","wyj"), Sorts.ascending(_id),2);
    
    		//查询字段名为name的所有内容,true:表示包含有字段名为name的值,false表示不包含有字段名为name的值
    		MongoCursor mongoCursor = mongoManager.find(MongoManager.MongoColl.HISTORYMSG,Filters.exists("name",false));
    
    		while(mongoCursor.hasNext()){
    			Document document = (Document) mongoCursor.next();
    			System.out.println(document.toString());
    		}
    	}
    
  • 相关阅读:
    MySQL 和 Oracle 在 MyBatis 使用中的区别
    nodeppt:网页版 PPT
    在 sql 语句出现 warning 之后,立刻执行 `show warnings;` 就可以看到 warning 提示信息
    MySQL 列,可选择的数据类型(通过sql命令查看:`help create table;`)
    create table 推荐规则
    MySQL 中的变量:系统变量(包括:会话变量、全局变量)、用户变量(包括:局部变量、用户变量)
    MySQL 有用的查询语句
    MySQL 遇到错误集锦
    VARCHAR(N)类型,utf8编码,则N最大值为多少,n表示什么?
    MySQL 的严格模式
  • 原文地址:https://www.cnblogs.com/alighie/p/9625655.html
Copyright © 2011-2022 走看看