欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

什么是MongoDB ?Mongobd介绍

程序员文章站 2022-07-15 11:08:14
...

什么是MongoDB ?
它是一个非关系型(nosql)数据库,又称为文档型数据库,它没有事务
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
三个元素:
db(数据库)
collection(集合) 相当于关系型数据库中的表
document:(文档)相当于关系型数据库中的一行数据
如:商品集合
每一个商品对象————————商品文档
默认端口号:27017
默认mongodb是没有用户名、密码
MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
存储文件是用 binary类型
主键:有mongodb自己创建的一个唯一标识,字段名为"_id"
什么是NoSQL
非关系型数据库
没有"表"的,每条数据都是一个独立的完整的对象

为什么用NoSQL
常用于存储不经常改变的、大数据量的数据
如:用户信息、日志信息、记录类的数据

常用数据类型:ObjectId、String、DateTime、Document、Double、Binary、int、Date、Boolean
windows下绿色版mongoDB使用:
1.解压压缩包
2.创建数据存储的文件夹,文件夹名:db——————整个目录地址不允许出现中文
3.启动mongoDB数据库
dos命令切换到mongoDB的bin目录下
执行命令,指定数据存储位置
mongod --dbpath=db 文件夹的完整目录 --logpath 文件夹的完整目录
命令详解:mongod.exe --bind_ip yourIPadress --logpath “C:\data\dbConf\mongodb.log” --logappend --dbpath “C:\data\db” --port yourPortNumber --serviceName “YourServiceName” --serviceDisplayName “YourServiceName” --install
参数 描述
–bind_ip 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
–logpath 定MongoDB日志文件,注意是指定文件不是目录
–logappend 使用追加的方式写日志
–dbpath 指定数据库路径
–port 指定服务端口号,默认端口27017
–serviceName 指定服务名称
–serviceDisplayNam 指定服务名称,有多个mongodb服务时执行。
–install 指定作为一个Windows服务安装。

4.验证是否启动成功
	a.dos命令窗打印了mongoDB的默认端口号:27017
	b.在浏览器访问mongoDB数据库
		localhost:27017

看到:It looks like you are trying to access MongoDB over HTTP on the native driver port.

5.启动mongoDB自带的客户端:javaScript shell
	双击mongoDB——> bin目录下的mongo.exe
	会打开一个命令执行窗口
		显示:
			shell的版本号
			连接到默认提供的test数据库
6.添加——————insert(需要添加的对象)

	db.集合名.insert({"name":"小明",k:v,k:v,....})
7.查询
	db.集合名.find()  查询集合中的所有数据
	db.集合名.find({"name":"小明"})   查询集合中name属性 等于 小明的所有信息
8.修改
	db.集合名.update(条件,修改的信息)  根据条件修改数据
	db.集合名.update({"name":"小明"},{"name":"小明","age":28})
		将name属性等于小明的对象修改为 name等于小明,age等于28
9.删除 
	db.集合名.remove(条件)  根据条件删除数据
	db.集合名.remove({"name":"小明"})
		删除所有name属性等于 小明的文档信息

客户端
“小火箭”robomongo
创建链接 注意不要操作system文件夹
创建集合
添加文档
日期使用字符串类型

学习使用:
开启服务
简单命令
spring整合mongodb,熟练使用mongoTemplate工具类的常用方法
spring中的AOP配置存储项目中的操作记录到mongoDB数据库
项目中新增日志管理模块,对操作记录进行各种查询

spring集成 mongodb
1.配置 pom.xml 依赖包

org.mongodb
mongo-java-driver
3.2.2

		<dependency>  
			<groupId>org.springframework.data</groupId>  
			<artifactId>spring-data-mongodb</artifactId>  
			<version>1.7.0.RELEASE</version>  
		</dependency>

2.配置 MongoDB 配置文件 : spring-mongodb.xml

<?xml version="1.0" encoding="UTF-8"?>
		<beans xmlns="http://www.springframework.org/schema/beans" 
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
			xmlns:context="http://www.springframework.org/schema/context" 
			xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
			xmlns:util="http://www.springframework.org/schema/util" 
			xsi:schemaLocation="http://www.springframework.org/schema/beans 
				  http://www.springframework.org/schema/beans/spring-beans.xsd 
				  http://www.springframework.org/schema/context 
				  http://www.springframework.org/schema/context/spring-context.xsd 
				  http://www.springframework.org/schema/data/mongo 
				  http://www.springframework.org/schema/data/mongo/spring-mongo-1.7.xsd 
				  http://www.springframework.org/schema/data/repository
				  http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd
				  http://www.springframework.org/schema/util 
				  http://www.springframework.org/schema/util/spring-util.xsd" >
			 <!-- 加载mongodb的属性配置文件 -->
			 <context:property-placeholder location="classpath:jdbc.properties" />
			 
			 <!-- 配置mongodb客户端 -->
			 <mongo:mongo-client host="${mongo.host}" port="${mongo.port}" id="mongoClient"/>  
			 
			 <!-- 配置工厂   引用mongodb客户端 -->
			 <mongo:db-factory id="mongoDbFactory" dbname="${mongo.dbname}" mongo-ref="mongoClient" />
			 <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
				<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
			 </bean>
			  
		</beans>
	3.配置MongoDB连接信息
		#MongoDB
		mongo.host=127.0.0.1
		mongo.port=27017
		mongo.dbname=db1905
		#mongo.username=
		#mongo.password=

4.在需要使用mongodb的地方注入mongoTemplate
@Autowired
private MongoTemplate mongoTemplate;

注意:
d.配置实体类
在类名上加@Document注解
设置collection属性指定mongodb中的集合名
在主键字段上加@Id注解 声明当前字段为主键
如果字段名为 “id” 则@Id注解可以省略
非映射字段的属性名上加 @Transient 注解
e.在需要使用的类中 注入mongoTemplate对象,后面直接调用方法操作即可

aop存储操作记录到mongodb数据库
1.配置aop
xml中配置切面

java类:!!!!!!!
java类中实现具体通知的接口,记录操作信息时 使用的是返回后通知 需要实现 AfterReturningAdvice接口以及实现接口中的afterreturning方法
	该方法有四个参数
		service中方法的返回值
		service接口中的具体方法
		该方法的参数值
		该service接口的实现类
在afterreturning方法中将数据存储到mongodb
	创建一个实体类装载操作数据
	在切面类中注入mongoTemplate对象
	将操作数据set到log的实体对象中
	mongoTemplate.insert(logObj)

//MethodBeforeAdvice:前置通知
//AfterReturningAdvice:后置通知
public class Aop_logDemo implements MethodBeforeAdvice, AfterReturningAdvice{

@Autowired
private MongoTemplate mongoTemplate;

// 后置通知执行的方法
public void
afterReturning(Object returnval, Method method, Object[] params, Object implurl) throws Throwable {
// System.out.println(arg0);
// System.out.println(arg1);
// System.out.println(arg2);
// System.out.println(arg3);
LogPojo logobj = new LogPojo();
logobj.setReturnval(returnval.toString());
logobj.setMethod(method.getName().toString());
String paramStr = “”;
for (int i = 0; i < params.length; i++) {
paramStr += params[i].toString()+",";
}
logobj.setParamVal(paramStr);
logobj.setImplUrl(implurl.toString());
mongoTemplate.insert(logobj);
System.out.println(1);
}

public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
	
	
}

}

常用方法:
删除
mongoTemplate.remove(需删除的对象);
remove(query, entityClass)
修改
//query 条件对象 update 需要修改的字段以及新的值 entityClass 实体类名.class

	Update update = new Update();
	update对象.set("实体类中的属性名","新的数据值")
	
	//set(字段名,新的值)
	update.set("sex", 0);

	修改
	mongoTemplate.upsert(query, upobj, Book.class);

	只更改第一个符合条件的数据
	mongoTemplate.updateFirst(new Query(), update, Student.class);

	更改所有符合条件的数据
	mongoTemplate.updateMulti(new Query(), update, Student.class);

添加
	
     insert 和 save的区别
当数据库中主键id的值已经存在时,save可以直接修改  insert会报错

// 主键id 不存在时,都可以执行新增操作

查询	
findOne(query对象,实体类.class,"数据库中的集合名"):查询对象
findAll(实体类.class):查询集合  所有数据
find(query对象,实体类.class,"数据库中的集合名"):按条件查询集合  
单条件
Query query = new Query(Criteria.where("empid").is("59c37b91addefcebe7af10e1"));
多个查询条件
Query query = new Query();
Criteria c1 = Criteria.where("price").gt(20).lt(65);
c1.andOperator(Criteria.where("credate").gt("2017-01-01").lt("2017-12-31"));
query.addCriteria(c1);

	精确
	Criteria.where("字段名").is(具体值)
	模糊
	Criteria.where("字段名").regex(具体值)
	大于
	Criteria.where("字段名").gt(具体值)
	小于
	Criteria.where("字段名").lt(具体值)
	排序
	sort
	Sort sort = new Sort("排序字段")默认正序
				排序方式     ,排序字段
	Sort sort = new Sort(Direction.DESC ,"testnum");

	query.with(sort)

	分页

	query.skip(起始位置)
	query.limit(每页条数)