1、MongoDB简介
参考学习:https://www.yiibai.com/mongodb/mongodb_quick_guide.html
https://www.runoob.com/mongodb/mongodb-tutorial.html
1.1 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
MongoDB 2.4中新引入了V8引擎, V8 是 Google 发布的开源 JavaScript 引擎,采用 C++ 编写,在 Google 的 Chrome 浏览器中被使用。V8 引擎可以独立运行,也可以用来嵌入到 C++ 应用程序中执行。
1.2 mongodb与 mysql性能比较:
分别插入100万条记录,并对其做100个用户并发查询操作
1.3 应用范围和限制
缺点:不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个数据仓库来使用。
适用于:日志系统,股票数据等。
不使用于:电子商务系统等需要连多表查询的功能。
1.4 mongodb的数据体系
总结:
- MongoDB属于非关系型数据库,基于分布式文件存储数据库
- MongoDB采用C++编写,存储格式为BSON(JSON扩展格式)
- MongoDB支持查询、存储结构灵活
MongoDB特点(MongoDB和关系型数据库不同)
- MongoDB是分布式数据库,存取速度比Oracle快
- MongoDB支持查询、存储结构灵活;Oracle结构不灵活(受表结构限制)
- MongoDB支持索引和Oracle一样,提高查询效率
- MongoDB不支持事务,数据完整性容易破坏
- MongoDB扩展性和灵活性比Oracle要好
2、windows下MongoDB的安装
Mongodb官网:https://www.mongodb.com/download-center#community
下载 对应系统版本的程序安装包,选择“Custom”自定义 安装路径:D:\developTools\nosql\mogodb,
默认是选择安装MongoDB compass的客户端工具,可以取消安装。。。这种安装,不需要配置服务之类的,都已经做好了,
访问:http://localhost:27017/,出现如下内容,说明安装成功....
https://blog.youkuaiyun.com/yichuanyanyu1991/article/details/84752589
客户端工具:https://www.cnblogs.com/xuliuzai/p/9651800.html
3、常用命令
https://blog.youkuaiyun.com/piaocoder/article/details/52384756
cd D:\developTools\nosql\mogodb\bin 运行
show dbs :显示当前所有库,显示成功。
a. 库
show dbs //查看所有库名
use xxx //使用一个库,不存在新建一个
db //当前库名
db.dropDatabase() //删除当前库
b. 集合
show collections //查看库中所有集合名
创建集合,使用插入记录命令db.xxx.insert
//创建了一个dept集合,插入一行记录
db.dept.insert({"deptno":10,"dname":"java"})
db.xxx.drop() //删除集合
c. 记录crud
c1. 插入操作(db.xxx.insert)
db.dept.insert({"deptno":12,"dname":"java"})
c2. 查询(db.xxx.find)
db.dept.find() //查询dept集合所有的记录
db.dept.find({"deptno":12}) //查询deptno=12的记录
db.dept.find({"deptno":{$gt:16}}) //查询deptno>16的记录
提示:>, >=, <, <=, !=符号,采用>"$gt", "$gte", "$lt", "$lte", "$ne"
c3. 更新(db.xxx.update)
db.dept.update({"deptno":10},{"dname":"JAVA"}) //将记录全部覆盖更新
db.dept.update({"deptno":20},{$set:{"dname":"PHP"}}) //部分更新,使用$set
c4. 删除(db.xxx.remove)
db.dept.remove({"dname":"JAVA"}) //删除dname=JAVA的记录
db.dept.remove({}) //删除所有记录
d. 用户管理
https://www.cnblogs.com/zhoujinyi/p/4610050.html
创建系统admin用户:
use admin
switched to db admin
> db.createUser(
... { user: "dba", pwd: "dba", //用户名、密码
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }
... )
Successfully added user: {
"user" : "dba",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
> db.auth("dba","dba") // 验证用户登录成功
1
创建子账号:
> use test
switched to db test
> db.createUser(
... { user: "root", pwd: "root",
... roles: [ { role: "readWrite", db: "test" } ] } //读写权限
... )
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
> db.auth("root","root")
1
>
//显示所有用户
show users;
删除用户
db.removeUser("userName");
4、Java访问MongoDB
引入mongo-java-driver-2.13.2.jar驱动包
代码实现:
package com.ssm.core.pc.controller;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
public class TestMongoDB {
// 连接mongodb服务
@Test
public void test() throws Exception {
MongoClient mongo = new MongoClient("localhost", 27017);
// 获取所有库名
List<String> dbnames = mongo.getDatabaseNames();
for (String s : dbnames) {
System.out.println("库名:" + s);
}
// 获取test库中的集合
DB db = mongo.getDB("test");
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
System.out.println("dept中集合名:" + s);
}
// 获取dept记录
DBCollection dept = db.getCollection("dept");
DBCursor cursor = dept.find();
while (cursor.hasNext()) {
DBObject obj = cursor.next();
System.out.println(JSON.toJSONString(obj));
}
// 关闭连接
mongo.close();
}
// 插入文档
@Test
public void testInsert() throws Exception {
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("userInfo");
DBCollection emp = db.getCollection("emp");
DBObject obj = new BasicDBObject();
obj.put("empno", 30);
obj.put("ename", "tiger");
obj.put("sal", 5000);
emp.insert(obj);
mongo.close();
}
//查询
@Test
public void testSelect() throws Exception{
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("userInfo");
DBCollection emp = db.getCollection("emp");
DBObject obj = new BasicDBObject();
obj.put("empno", 30);
DBCursor cursor = emp.find(obj);//empno=30 , db.emp.find({"empno":30})
while(cursor.hasNext()){
DBObject r = cursor.next();
System.out.println(r.get("_id")+" "+r.get("empno")+" "+r.get("ename"));
}
mongo.close();
}
//更新
@Test
public void testUpdate() throws Exception{
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("userInfo");
DBCollection emp = db.getCollection("emp");
DBObject param = new BasicDBObject();
param.put("empno", 30);
DBObject value = new BasicDBObject();
DBObject attr1 = new BasicDBObject();
attr1.put("ename", "TIGER");
value.put("$set", attr1);
emp.update(param, value);// db.emp.update({"empno":30},{$set:{"ename":"TIGER"}})
mongo.close();
}
//删除
@Test
public void testDelete() throws Exception{
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("userInfo");
DBCollection emp = db.getCollection("emp");
DBObject param = new BasicDBObject();
param.put("empno", 30);
emp.remove(param);//db.emp.remove({"empno":30});
mongo.close();
}
}
MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.4</version>
</dependency>
</dependencies>
https://blog.youkuaiyun.com/qq_36760753/article/details/81149077
5、spring整合mongodb
https://blog.youkuaiyun.com/liujian_01/article/details/77368846
核心步骤:
a、pom引入jar依赖
<!-- spring整合 mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.10.1.RELEASE</version>
</dependency>
b. 增加xml配置 spring-mongodb.xml
b1. xml增加头部文件
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.10.xsd
b2 .mongdb属性配置
c. 基本操作
mongoTemplate的常用api,自行百度学习...,这里只是简单的操作api
package com.ssm.index.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ssm.index.entity.Student;
@Controller
@RequestMapping(value = "/index", produces = "application/json;charset=UTF-8")
public class TestMongoDB {
@Autowired
private MongoTemplate mongoTemplate;
@RequestMapping(value = "/testMongodb", method = RequestMethod.POST)
@ResponseBody
public void testMongodb(String id) {
Student stu1 = new Student();
Student stu2 = new Student();
Student stu3 = new Student();
stu1.setId(1);
stu1.setName("测试1");
stu1.setSex("24");
stu2.setId(2);
stu2.setName("测试2");
stu2.setSex("26");
stu3.setId(3);
stu3.setName("测试3");
stu3.setSex("28");
// 新增
mongoTemplate.insert(stu2, "student");
// 保存 会覆盖一样的数据
mongoTemplate.save(stu1, "student");
mongoTemplate.save(stu2, "student");
mongoTemplate.save(stu3, "student");
// 根据条件查询
// Query query = new Query(Criteria.where("name").is("Java编程之道"));
Query query = new Query();
query.addCriteria(Criteria.where("id").is(2)); // id为2d 数据
List<Student> stus = mongoTemplate.find(query, Student.class, "student");
for (Student student : stus) {
System.err.println("姓名:" + student.getName());
}
// 更新
Update update = new Update();
update.set("name", "更新后名称");
mongoTemplate.upsert(query, update, Student.class, "student");
// 删除 id为2d 数据
mongoTemplate.remove(query, Student.class, "student");
// 查询所有
List<Student> students = mongoTemplate.findAll(Student.class, "student");
for (Student student : students) {
System.err.println("姓名:" + student.getName() + ";id:" + student.getId());
}
}
}
https://blog.youkuaiyun.com/qq_40986512/article/details/88970467
https://blog.youkuaiyun.com/qq_37421862/article/details/81287247