mongoDB-demo代码示例

一、Java原生客户端

1、jar

在这里插入图片描述

2、快速入门

package com.enjoylearning.mongo.test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

import static com.mongodb.client.model.Updates.*;
import static com.mongodb.client.model.Filters.*;

//原生java驱动 document的操作方式
public class QuickStartJavaDocTest {
   

	private static final Logger logger = LoggerFactory.getLogger(QuickStartJavaDocTest.class);
	
	//数据库
    private MongoDatabase db;
    
    //文档集合
    private MongoCollection<Document> doc;
    
    //连接客户端(内置连接池)
    private MongoClient client;
	
	
    @Before
    public void init(){
   
    	client = new MongoClient("192.168.29.128",27022);
    	db =client.getDatabase("lison");
    	doc = db.getCollection("users");
    }
    
    @Test
    public void insertDemo(){
   
    	Document doc1 = new Document();
    	doc1.append("username", "cang");
    	doc1.append("country", "USA");
    	doc1.append("age", 20);
    	doc1.append("lenght", 1.77f);
    	doc1.append("salary", new BigDecimal("6565.22"));//存金额,使用bigdecimal这个数据类型
    	
    	//添加“address”子文档
    	Map<String, String> address1 = new HashMap<String, String>();
    	address1.put("aCode", "0000");
    	address1.put("add", "xxx000");
    	doc1.append("address", address1);
    	
    	//添加“favorites”子文档,其中两个属性是数组
    	Map<String, Object> favorites1 = new HashMap<String, Object>();
    	favorites1.put("movies", Arrays.asList("aa","bb"));
    	favorites1.put("cites", Arrays.asList("东莞","东京"));
    	doc1.append("favorites", favorites1);
    	
    	Document doc2  = new Document();
    	doc2.append("username", "Chen");
    	doc2.append("country", "China");
    	doc2.append("age", 30);
    	doc2.append("lenght", 1.77f);
    	doc2.append("salary", new BigDecimal("8888.22"));
    	Map<String, String> address2 = new HashMap<>();
    	address2.put("aCode", "411000");
    	address2.put("add", "我的地址2");
    	doc2.append("address", address2);
    	Map<String, Object> favorites2 = new HashMap<>();
    	favorites2.put("movies", Arrays.asList("东游记","一路向东"));
    	favorites2.put("cites", Arrays.asList("珠海","东京"));
    	doc2.append("favorites", favorites2);
    	
    	//使用insertMany插入多条数据
    	doc.insertMany(Arrays.asList(doc1,doc2));
    	
    }
    
    @Test
    public void testFind(){
   
    	final List<Document> ret = new ArrayList<>();
    	//block接口专门用于处理查询出来的数据
    	Block<Document> printBlock = new Block<Document>() {
   
			@Override
			public void apply(Document t) {
   
				logger.info(t.toJson());//打印数据
				ret.add(t);
			}
    		
		};   	
    	//select * from users  where favorites.cites has "东莞"、"东京"
		//db.users.find({ "favorites.cites" : { "$all" : [ "东莞" , "东京"]}})
		Bson all = all("favorites.cites", Arrays.asList("东莞","东京"));//定义数据过滤器,喜欢的城市中要包含"东莞"、"东京"
		FindIterable<Document> find = doc.find(all);
		find.forEach(printBlock);
		logger.info("------------------>"+String.valueOf(ret.size()));
		ret.removeAll(ret);
    	
    	
    	//select * from users  where username like '%s%' and (contry= English or contry = USA)
		// db.users.find({ "$and" : [ { "username" : { "$regex" : ".*s.*"}} , { "$or" : [ { "country" : "English"} , { "country" : "USA"}]}]})

		String regexStr = ".*s.*";
		Bson regex = regex("username", regexStr);//定义数据过滤器,username like '%s%'
		Bson or = or(eq("country","English"),eq("country","USA"));//定义数据过滤器,(contry= English or contry = USA)
		Bson and = and(regex,or);
		FindIterable<Document> find2 = doc.find(and);
		find2.forEach(printBlock);
		logger.info("------------------>"+String.valueOf(ret.size()));

    }
    
    @Test
    public void testUpdate(){
   
    	//update  users  set age=6 where username = 'lison' 
//    	db.users.updateMany({ "username" : "lison"},{ "$set" : { "age" : 6}},true)

    	Bson eq = eq("username", "lison");//定义数据过滤器,username = 'lison' 
		Bson set = set("age", 8);//更新的字段.来自于Updates包的静态导入
		UpdateResult updateMany = doc.updateMany(eq, set);
    	logger.info("------------------>"+String.valueOf(updateMany.getModifiedCount()));//打印受影响的行数
    	
    	//update users  set favorites.movies add "小电影2 ", "小电影3" where favorites.cites  has "东莞"
    	//    db.users.updateMany({ "favorites.cites" : "东莞"}, { "$addToSet" : { "favorites.movies" : { "$each" : [ "小电影2 " , "小电影3"]}}},true)

    	Bson eq2 = eq("favorites.cites", "东莞");//定义数据过滤器,favorites.cites  has "东莞"
		Bson addEachToSet = addEachToSet("favorites.movies", Arrays.asList( "小电影2 ", "小电影3"));//更新的字段.来自于Updates包的静态导入
		UpdateResult updateMany2 = doc.updateMany(eq2, addEachToSet);
    	logger.info("------------------>"+String.valueOf(updateMany2.getModifiedCount()));
    }
    
    @Test
    public void testDelete(){
   
    	
    	//delete from users where username = ‘lison’
    	Bson eq = eq("username", "lison");//定义数据过滤器,username='lison'
		DeleteResult deleteMany = doc.deleteMany(eq);
    	logger.info("------------------>"+String.valueOf(deleteMany.getDeletedCount()));//打印受影响的行数
    	
    	//delete from users where age >8 and age <25
    	Bson gt = gt("age",8);//定义数据过滤器,age > 8,所有过滤器的定义来自于Filter这个包的静态方法,需要频繁使用所以静态导入
//    	Bson gt = Filter.gt("age",8);
    	
		Bson lt = lt("age",25);//定义数据过滤器,age < 25
		Bson and = and(gt,lt);//定义数据过滤器,将条件用and拼接
		DeleteResult deleteMany2 = doc.deleteMany(and);
    	logger.info("------------------>"+String.valueOf(deleteMany2.getDeletedCount()));//打印受影响的行数
    }
    
}

2.1、pojo方式

package com.enjoylearning.mongo.test;


import static com.mongodb.client.model.Updates.*;
import static com.mongodb.client.model.Filters.*;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.conversions.Bson;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.enjoylearning.mongo.entity.Address;
import com.enjoylearning.mongo.entity.Favorites;
import com.enjoylearning.mongo.entity.User;
import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

//原生java驱动 Pojo的操作方式
public class QuickStartJavaPojoTest {
   

	private static final Logger logger = LoggerFactory.getLogger(QuickStartJavaPojoTest.class);
	
    private MongoDatabase db;
    
    private MongoCollection<User> doc;
    
    private MongoClient client;	
	
    @Before
    public void init(){
   
    	//编解码器的list
    	List<CodecRegistry> codecResgistes = new ArrayList<>();
    	//list加入默认的编解码器集合
    	codecResgistes.add(MongoClient.getDefaultCodecRegistry());
    	//生成一个pojo的编解码器
    	CodecRegistry pojoCodecRegistry = CodecRegistries.
    			fromProviders(PojoCodecProvider.builder().automatic(true).build());
    	//list加入pojo的编解码器
    	codecResgistes.add(pojoCodecRegistry);
    	//通过编解码器的list生成编解码器注册中心
    	CodecRegistry registry = CodecRegistries.fromRegistries(codecResgistes);
    	
    	//把编解码器注册中心放入MongoClientOptions
    	//MongoClientOptions相当于连接池的配置信息
    	MongoClientOptions build = MongoClientOptions.builder().
    			codecRegistry(registry).build();

    	ServerAddress serverAddress = new ServerAddress("192.168.29.128",27022);

		client = new MongoClient(serverAddress, build);
    	db =client.getDatabase("lison");
    	doc = db.getCollection("users",User.class);
    }
 
    @Test
    public void insertDemo(){
   
    	User user = new User();
    	user.setUsername("cang");
    	user.setCountry("USA");
    	user.setAge(20);
    	user.setLenght(1.77f);
    	user.setSalary(new BigDecimal("6265.22"));
    	
    	//添加“address”子文档
    	Address address1 = new Address();
    	address1.setaCode("411222");
    	address1.setAdd("sdfsdf");
    	user.setAddress(address1);
    	
    	//添加“favorites”子文档,其中两个属性是数组
    	Favorites favorites1 = new Favorites();
    	favorites1.setCites(Arrays.asList("东莞","东京"));
    	favorites1.setMovies(Arrays.asList("西游记","一路向西"));
    	user.setFavorites(favorites1);
    	    	
    	User user1 = new User();
    	user1.setUsername("chen");
    	user1.setCountry("China");
    	user1.setAge(30);
    	user1.setLenght(1.77f);
    	user1.setSalary(new BigDecimal("6885.22"));
    	Address address2 = new Address();
    	address2.setaCode("411000");
    	address2.setAdd("我的地址2");
    	user1.setAddress(address2);
    	Favorites favorites2 = new Favorites();
    	favorites2.setCites(Arrays.asList("珠海","东京"));
    	favorites2.setMovies(Arrays.asList("东游记","一路向东"));
    	user1.setFavorites(favorites2);
    	
    	
    	//使用insertMany插入多条数据
    	doc.insertMany(Arrays.asList(user,user1));
    	
    }
        
    @Test
    public void testFind(){
   
    	
    	final List<User> ret = new ArrayList<>();
    	Block<User> printBlock = new Block<User>() {
   
			@Override
			public void apply(User t) {
   
				System.out.println(t.toString());
				ret.add(t);
			}    		
		};
		
    	//select * from users  where favorites.cites has "东莞"、"东京"
		
		Bson all = all("favorites.cites", Arrays.asList("东莞","东京"));//定义数据过滤器,喜欢的城市中要包含"东莞"、"东京"
		FindIterable<User> find = doc.find(all);
		find.forEach(printBlock);
		logger.info("------------------>"+String.valueOf(ret.size()));
		ret.removeAll(ret);
    	
    	//select * from users  where username like '%s%' and (contry= English or contry = USA)
		String regexStr = ".*s.*";
		Bson regex = regex("username", regexStr);//定义数据过滤器,username like '%s%'
		Bson or = or(eq("country","English"),eq("country","USA"));//定义数据过滤器,(contry= English or contry = USA)
		FindIterable<User> find2 = doc.find(and(regex,or));
		find2.forEach(printBlock);
		logger.info("------------------>"+String.valueOf(ret.size()));

    }   
 
    @Test
    public void testUpdate(){
   
    	//update  users  set age=6 where username = 'lison' 
    	Bson eq = eq("username", "lison");//定义数据过滤器,username = 'lison' 
		Bson set = set("age", 8);//更新的字段.来自于Updates包的静态导入
		UpdateResult updateMany = doc.updateMany(eq, set);
    	logger.info("------------------>"+String.valueOf(updateMany.getModifiedCount()));//打印受影响的行数
    	
    	//update users  set favorites.movies add "小电影2 ", "小电影3" where favorites.cites  has "东莞"
    	Bson eq2 = eq("favorites.cites", "东莞");//定义数据过滤器,favorites.cites  has "东莞"
		Bson addEachToSet = addEachToSet("favorites.movies", Arrays.asList( "小电影2 ", "小电影3"));//更新的字段.来自于Updates包的静态导入
		UpdateResult updateMany2 = doc.updateMany(eq2, addEachToSet);
    	logger.info("------------------>"+String.valueOf(updateMany2.getModifiedCount()));
    }
    
    @Test
    public void testDelete(){
   
    	
    	//delete from users where username = ‘lison’
    	Bson eq = eq("username", "lison");//定义数据过滤器,username='lison'
		DeleteResult deleteMany = doc.deleteMany(eq);
    	logger.info("------------------>"+String.valueOf(deleteMany.getDeletedCount()));//打印受影响的行数
    	
    	//delete from users where age >8 and age <25
    	Bson gt = gt("age",8);//定义数据过滤器,age > 8,所有过滤器的定义来自于Filter这个包的静态方法,需要频繁使用所以静态导入
    	
		Bson lt = lt("age",25);//定义数据过滤器,age < 25
		Bson and = and(gt,lt);//定义数据过滤器,将条件用and拼接
		DeleteResult deleteMany2 = doc.deleteMany(and);
    	logger.info("------------------>"+String.valueOf(deleteMany2.getDeletedCount()));//打印受影响的行数
    }
    
}

3、查询

在这里插入图片描述

package com.enjoylearning.lison.mongodb;

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Projections.*;
import static com.mongodb.client.model.Sorts.*;
import static com.mongodb.client.model.Aggregates.*;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.bson.BSON;
import org.bson.BsonDocument;
import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.conversions.Bson;
import org.junit.Before;
import org.junit.Test;
import org.junit
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值