什么是MongoDB ?Mongobd介绍
什么是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(每页条数)
上一篇: jQuery介绍详细(二)
下一篇: Node介绍——什么是Node?