mongodb之增删改查

摘要:
目录概述方法构造方法getInstance方法initMongo方法getCollection方法将数据添加到mongodb更新mongodb$set$inc$mul$rename中的数据更新操作符删除mongodb中的数据查找数据概述此类是消息的用户定义类,用于操作mongodb,可以插入、修改和删除mongodb=ret){returnnull;}否则{instance=newMongoManager();instance.initMongo();}}returninstance;}此方法控制该类是否为单例。如果ret=0,则读取配置文件是正常的。如果是initMongo,则会获得相应数据库中的所有集合。

目录

概述

该类是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());
		}
	}

免责声明:文章转载自《mongodb之增删改查》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vim的字符编码设置初探PHP多进程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mongodb 笔记03 查询、索引

查询 1. MongoDB使用find来进行查询。find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件。空的查询会匹配集合的全部内容。要是不指定查询,默认是{}。 2.可以通过find的第二个参数来指定想要的键。这样即会节省传输的数量,又能节省客户端解码文档的时间和内存消耗。举例:db.users.find({},{"userna...

mongodb模糊查询包含特殊字符

mongodb中的待特殊字符的模糊查询需要转义下才能查到 (name: /wo*2hjf/ 查不到 name: /wo*2hjf/ 查得到) let str=wo*2hjf; let filter1={ name: new RegExp(str) }; let filter2={ name: new RegExp(str.replace(/*/g,'\*...

小程序对mongodb日期显示处理问题

描述:微信小程序开发后端数据库使用的是mongodb。其中有个字段为日期类型,这样在查询数据显示的时候如下:/Date(1584538219495)/   为了能够正常的显示日期需要使用js处理一下。 js函数 //处理日期 changeDateFormat: function (cellval){ var dateVal = cellva...

Java中枚举的使用

常量与枚举 一、常量定义方法        常量是其值固定不变的量,一般可以分为字面常量和命名常量,如数字1,2,1.3,字符串“abc”,这些就是字面常量,而命名常量是我们使用一些有意义的名称来代表字面常量值,通常命名常量有助于我们更好地理解程序的逻辑。        在Java中,我们通常使用public static final ... 方式来定义常...

MongoDB的使用学习之(四)权限设置--用户名、密码、端口==

本文参照:http://hi.baidu.com/tianhuimin/item/590d96cfd7ac1509c610b26a 本人也是按照此文章操作的,但是有些不妥,红色文字就是我实践后,需要改正的地方 一、关于权限的默认配置    在默认情况下,mongod是监听在0.0.0.0之上的,任何客户端都可以直接连接27017,且没有认证。这样做的好处是...

10种 分布式ID生成方式(新增MongoDB的ObjectId)

一、为什么要用分布式ID? 在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征? 1、什么是分布式ID? 拿MySQL数据库举个栗子: 在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。 但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表...