MongoDB

        MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON  的 BSON 格式,因此可以存储比较复杂的数据类型。

java连接及使用:

 导入依赖:

 <dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.4.1</version>
    </dependency>
  </dependencies>

遍历集合数据:

//创建连接对象
MongoClient client=new MongoClient();
//获取数据库	
MongoDatabase database = client.getDatabase("test");	
//获取集合
MongoCollection<Document> collection = database.getCollection("student");
//获取文档集合		
FindIterable<Document> list = collection.find();
//遍历集合中的文档输出数据
for( Document doc: list){
	System.out.println("name:"+ doc.getString("name") );
        System.out.println("age:"+ doc.getDouble("age") );
	System.out.println("--------------------------");
}

匹配查询:

//查询student集合中name为张三的文档
//构建查询条件
BasicDBObject bson=new BasicDBObject("name", "张三");		
FindIterable<Document> list = collection.find(bson);//获取文档集合
//....遍历集合

模糊查询:

//构建模糊查询条件是通过正则表达式的方式来实现的
//完全匹配Pattern pattern = Pattern.compile("^name$");
//右匹配Pattern pattern = Pattern.compile("^.*name$");
//左匹配Pattern pattern = Pattern.compile("^name.*$");
//模糊匹配Pattern pattern = Pattern.compile("^.*name.*$");
//模糊查询student集合中name 中含有的"小"文档记录
//模糊查询:like %小%
Pattern queryPattern = Pattern.compile("^.*小.*$");
BasicDBObject bson=new BasicDBObject("name", queryPattern);	
FindIterable<Document> list = collection.find(bson);//获取文档集合
//....遍历集合

大鱼小鱼:

//查询年龄小于20的		
BasicDBObject bson=new BasicDBObject("age", new BasicDBObject("$lt",20));
FindIterable<Document> list = collection.find(bson);//获取文档集
//....遍历集合

and:

/查询年龄大于等于20的			
BasicDBObject bson1=new BasicDBObject("age", new BasicDBObject("$gte",20));
//查询年龄小于30的
BasicDBObject bson2=new BasicDBObject("age", new BasicDBObject("$lt",30));
//构建查询条件and
BasicDBObject bson=new  BasicDBObject("$and", Arrays.asList(bson1,bson2)  );

or:

BasicDBObject bson1=new BasicDBObject("age", new BasicDBObject("$lte",20));		
BasicDBObject bson2=new BasicDBObject("name", "张三");
//构建查询条件or
BasicDBObject bson=new BasicDBObject("$or", Arrays.asList( bson1, bson2 )  );

连接池:

          MongoClient 被设计为线程安全的类,也就是我们在使用该类时不需要考虑并发的情况,这样我们可以考虑把MongoClient 做成一个静态变量,为所有线程公用,不必每次都销毁。这样可以极大提高执行效率。实际上,这是MongoDB提供的内置的连接池来实现的。   

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientOptions.Builder;
import com.mongodb.WriteConcern;
import com.mongodb.client.MongoDatabase;

public class MongoManager {

	private static MongoClient mongoClient=null;
	
	//对mongoClient初始化
	private static void init(){		
		//连接池选项
		Builder builder = new MongoClientOptions.Builder();//选项构建者	
		builder.connectTimeout(5000);//设置连接超时时间
		builder.socketTimeout(5000);//读取数据的超时时间
		builder.connectionsPerHost(30);//每个地址最大请求数		
		builder.writeConcern(WriteConcern.NORMAL);//写入策略,仅抛出网络异常
		MongoClientOptions options = builder.build();
		mongoClient=new MongoClient("127.0.0.1",options);	
	}
	
	public static MongoDatabase getDatabase(){
		if(mongoClient==null){
			init();
		}		
		return mongoClient.getDatabase("itcastdb");
	}
}

查询与测试:

import java.util.HashMap;
import java.util.Map;

import org.bson.Document;

import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class SiteLogUtil {
	/*
	 * 插入数据库
	 */
	public static void save(String logname,Map<String, Object> map) {
		MongoDatabase database = MongoManger.getDatabase();
		MongoCollection<Document> collection = database.getCollection(logname);
		Document document = new Document(map);
		collection.insertOne(document);
	}
	/*
	 * 按条件查询
	 */
	public static FindIterable<Document> list(String logName,Map<String, Object> map) {
		MongoDatabase database = MongoManger.getDatabase();
		MongoCollection<Document> collection = database.getCollection(logName);
		BasicDBObject basicDBObject = new BasicDBObject(map);
		return collection.find(basicDBObject);
	}
	/*
	 * 分页查询
	 */
	public static Map<String, Object> listPage(
			String logName,Map<String, Object> map,int pageIndex,int pageSize) {
		MongoDatabase database = MongoManger.getDatabase();
		MongoCollection<Document> collection = database.getCollection(logName);
		BasicDBObject filter = new BasicDBObject(map);
		FindIterable<Document> find = collection.find(filter);
		int skip = (pageIndex-1)*pageSize;
		find.skip(skip);
		find.limit(pageSize);
		long count = collection.count();
		Map<String, Object> mm = new HashMap<String, Object>();
		mm.put("total", count);
		mm.put("rows", find);
		return mm;
	}


}
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.bson.Document;
import org.junit.Test;

import com.hebi.SiteLogUtil;
import com.mongodb.client.FindIterable;
import com.mongodb.util.JSON;

public class mongoTestt {

	@Test
	public void test() {
		
		for (int i = 0; i < 1000; i++) {
			Map map = new HashMap();
			map.put("userid", "1"+i);
			map.put("Time", new Date());
			map.put("goodsid", "123123");
			SiteLogUtil.save("goods", map);
		}
		
	}
	
	@Test
	public void test2() {
		Map map = new HashMap();
		map.put("userid", "1");
		FindIterable<Document> list = SiteLogUtil.list("browselog",map);
		String serialize = JSON.serialize(list);
		System.out.println(serialize);
	}
	
	
	@Test
	public void test3() {
		Map map = new HashMap();
		map.put("goodsid", "123123");
		Map<String, Object> list = SiteLogUtil.listPage("browselog", map, 2, 10);
		String serialize = JSON.serialize(list);
		System.out.println(serialize);
	}
	
	

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值