1.基本概念
mongodb中基本的概念是文档、集合、数据库:
Sql中数据库一行数据对应数据库文档:
2.数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表
3.MongoDB 数据类型
下表为MongoDB中常用的几种数据类型:
4.操作文档基本语法
操作文档语法: 数据库.集合.语句({})
4.1插入文档(如果没有集合则创建集合)
db.集合名.insert({name:”测试”});
相当于
Insert into 表名(‘name’) values(‘测试’);
- 插入集合:db.ygyDemo.insert({“name”: “杨冠宇”,“age”: 23, “phone”: “15531455555”});
4.2修改文档
db.ygyDemo.update({"name": "杨冠宇"},{$set:{"age":18}})
相当于sql:update ygyDemo set age=18 where name=’杨冠宇’
$set用来指定一个键并更新键值,若键不存在则创建
注意:如果存在多条数据,此条语句只会修改第一条发现的数据:
- 全部修改需在后面添加multi为true
4.3修改文档字段
$unset用来删除文档下的字段
语法:db.ygyDemo.update({"name": "杨冠宇"},{$unset:{"phone":1}},{mulit:true})
相当于删除db数据库下ygyDemo表name字段为“杨冠宇”的“phone”字段
db.ygyDemo.update({},{$unset:{"phone":1}},{mulit:true})
不指定条件时,相当于删除整个db数据库下ygyDemo表的“phone”字段
例如:
- 集合中有三条name为“杨冠宇”,两条为“杨冠宇1”的,执行$unset之后修改三条
4.4删除文档
db.ygyDemo.deleteOne({"name":"杨冠宇"})
只删除name为杨冠宇的第一条数据,deleteMany为删除所有
相当于sql:delete from ygyDemo where name = ‘杨冠宇’
4.5查询文档
db.ygyDemo.find({"name":"杨冠宇"}).pretty();
Pretty();对查询出来的数据进行格式化。
- 多个and查询条件用逗号分隔
- - Or语句查询[]内放所有查询条件
- 相当于sql:select * from ygyDemo where name=’杨冠宇’ and (phone = ‘15531455555’ or phone = ‘15531455554’);
4.6分页语句
skip跳过指定数量的数据从0开始,limit读取指定数量的数据:
db.ygyDemo.find().skip(1).limit(2);查询第二条开始的2条数据
相当于mySql语句:select * from ygyDemo limit 1,2;
附:大佬语法学习
4.7聚合语句
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语 句中的 count(*),
基本语法:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
count语句:db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
相当于sql:select by_user, count(*) from mycol group by by_user
_id后面参数加$为要分组的字段,num_tutorial后面参数为聚合表达式:
例如:db.ygyDemo.aggregate([{$group : {_id : "name", num_tutorial : {$sum : "$age"}}}])
相当于sql:select name, sum(age) from ygyDemo group by name
5.集成springboot
springBoot版本:1.5.10.RELEASE
5.1添加maven pom依赖mongodb-plus-spring-boot-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>mongodb-plus-spring-boot-starter</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
5.2配置数据库连接:
5.3在应用主类上增加@EnableMongoPlus注解
6.MongoTemplate在系统中使用
通过MongoTemplate来调用各种增删改查语句:
6.1新增单条数据:save
tableName:表名;
Params:插入数据;
6.2新增多条数据insertDBObjectList:
tableName:表名;
dbObjects:数据集合;
6.3更新一条数据updateFirst:
query:条件;
update:数据;
tableName:表名;
调用示例:
6.4更新多条数据updateMulti:
query:条件;
update:数据;
tableName:表名;
调用示例:
6.5根据id批量删除deleteByIds:
tableName:表名;
Ids:多条id
6.7获取总数count:
tableName:表名;
query:条件;
6.8根据条件查询:getList
tableName:表名;
query:条件;
实体反射赋值:
private void reflectValue(Object obj, DBObject dbObject) {
Class c = obj.getClass();
for (String s : dbObject.keySet()) {
try {
Field declaredField = c.getDeclaredField(s);
declaredField.setAccessible(true);
declaredField.set(obj, dbObject.get(s));
} catch (Exception e) {
e.printStackTrace();
}
}
}
调用示例:
反射赋值:
6.9分页查询pageMongo:
criteria:查询条件;
tableName:表名;
paramFind:模糊查询字段;
pageNo:开始数;
pageSize:每页显示数;
/**
* 处理mongodb查询建立regex 模糊查询的query
*
* @param paramFind
* @param query
*/
public void generatorLikeQuery(Map<String, Object> paramFind, Query query) {
if (paramFind != null && !paramFind.isEmpty()) {
Iterator<String> iterator = paramFind.keySet().iterator();
Criteria criteria = new Criteria();
while (iterator.hasNext()) {
String next = iterator.next();
Object value = paramFind.get(next);
if (value instanceof String) {
//_ {} $ ^
value = filterRegex(((String) value));
query.addCriteria(criteria.where("_id").ne(null)
.and(next).regex(Pattern.compile("^.*" + value + ".*$")));
} else {
query.addCriteria(criteria.where("_id").ne(null).and(next).is(value));
}
}
}
}
/**
* 转义正则特殊字符 ($()*+.[]?\^{},|)
*
* @param keyword
* @return
*/
public String filterRegex(String keyword) {
if (StringUtils.isNotBlank(keyword)) {
String[] fbsArr = {"\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|"};
for (String key : fbsArr) {
if (keyword.contains(key)) {
keyword = keyword.replace(key, "\\" + key);
}
}
}
return keyword;
}
构造模糊查询参数:
附:参考地址:
https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html