基本概念
- 文档是
MongoDB
中数据的基本单元,非常类似于关系型数据库中的行,但更具有表现力; - 集合
Collection
可以看作是一个动态模式(Dynamic Schema
)的表; MongoDB
的一个实例可以拥有多个相互独立的数据库 (Database
),每一个数据库都拥有自己的集合;- 每一个文档都有一个特殊的键
_id
,这个键在文档所属的集合中是唯一的; MongoDB
自带了一个简单但功能强大的JavaScript Shell
,可用于管理MongoDB
的实例或数据操作。
一.在linux服务器上安装mongodb
下 载: curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
解 压: tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
重命名: mv mongodb-linux-x86_64-3.0.6 mongodb
删除安装包:rf mongodb-linux-x86_64-3.0.6.tgz
创建数据库目录
mongodb的默认数据库放在 /data/db目录下
如果没有的话,就根目录下创建这个目录
打开数据库链接
[root@VM_0_16_centos]# cd /usr/local/mongodb/bin
[root@VM_0_16_centos bin]# ./mongod
看到如下代表启动成功了
重启打开个终端,进入数据库页面
[root@VM_0_16_centos]# cd /usr/local/mongodb/bin
[root@VM_0_16_centos bin]# ./mongo
看到如下,你已经进去到了数据库里面了
简单的创建1个数据库,创建1张表,插入2条数据用于标题3的java远程连接mongodb数据库
二.在终端上操作mongodb 命令
2.1数据库操作
Help查看命令提示
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();
查询所有数据库
show dbs;
增加/切换数据库 (存在则切换,不存在则创建类似于hibrenate中的save方法)
use[db名称]
删除当前使用数据库
db.dropDatabase();
5、从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库
6、从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
7、修复当前数据库
db.repairDatabase();
8、查看当前使用的数据库
db.getName();
db; db和getName方法是一样的效果,都可以查询当前使用的数据库
9、显示当前db状态
db.stats();
10、当前db版本
db.version();
11、查看当前db的链接机器地址
db.getMongo();
2.2Collection聚集集合
查询所有集合 show collections
1、创建一个聚集集合(table)
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
2、得到指定名称的聚集集合(table)
db.getCollection("account");
3、得到当前db的所有聚集集合
db.getCollectionNames();
4、显示当前db所有聚集索引的状态
db.printCollectionStats();
创建集合并且插入数据 db.集合名称.insert({"key":"value"});
db.test1.insert({"name":"李俊明"}); 如果不插入 _id 系统会默认把内存地址作为_id
如果id存在使用save方法会修改之前的值
db.test1.insert({_id:"111",name:"李俊明"});
db.test1.save({_id:"111",name:"李俊"});
批量插入数据
db.test1.insert([{"sex":1},{"grade":2}]);
修改数据
query是条件,update是要修改的值 upsert为true,查询条件没查到则新增记录,默认false不插入
multi为true更新所有查出的记录,默认为false,只修改第1条
db.test1.update(query,update,{upsert:boolean,$multi:boolean});
db.test1.update({sex:1},{$set:{age:101}},{upsert:true,multi:true});
删除数据 justOne 如果为true或1 只删除1个文档,默认删除所有匹配到的
db.test1.remove(query,{justOne:boolean})
2.3用户相关
2.31.通过非授权的方式启动mongo
2.3.2创建admin数据库
use admin
2.3.3添加管理员用户
db.createUser({user:"ming",pwd:"1995",roles:["userAdminAnyDatabase"]})
2.3.4添加普通数据库用户
use test
db.createUser({user:"ming",pwd:"1995",roles:["readWrite"]})
2.3.5认证
db.auth("ming", "1995")
2.3.5
退出,以授权方式启动
sudo ./mongod --config ../mongod.conf --auth
备注:
--auth代表授权启动,需要帐号密码才能访问
auth=true可以加到mongo.conf配置文件里面去进行统一管理
2、显示当前所有用户
show users;
3、删除用户
db.removeUser("userName");
其他
1、查询之前的错误信息
db.getPrevError();
2、清除错误记录
db.resetError();
查看聚集集合基本信息
1、查看帮助 db.yourColl.help();
2、查询当前集合的数据条数 db.yourColl.count();
3、查看数据空间大小 db.userInfo.dataSize();
4、得到当前聚集集合所在的db db.userInfo.getDB();
5、得到当前聚集的状态 db.userInfo.stats();
6、得到聚集集合总大小 db.userInfo.totalSize();
7、聚集集合储存空间大小 db.userInfo.storageSize();
8、Shard版本信息 db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users
10、删除当前聚集集合 db.userInfo.drop();
2.4聚集集合查询
1、查询所有记录
db.userInfo.find();
相当于:select* from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。
2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
3、查询age = 22的记录
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
4、查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age >22;
5、查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age <22;
6、查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
7、查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
8、查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
9、查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;
10、查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
11、查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
12、查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
13.分页查询 number表示查询几条,num代表跳过记录数
db.userInfo.find().limit(number).skip(num);
三. java远程连接mongodb
本人用的工具是idea,项目框架是springboot,如果不会创建springboot项目的看下
我这篇初学者springboot文章url:https://blog.csdn.net/ming19951224/article/details/80978261
1.引入springboot和mongodb依赖包
<dependencies>
<!-- spring-boot-starter-data-mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!--mongodb依赖-->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.application.properties文件里面配置mongodb连接属性
spring.data.mongodb.host=127.0.0.1 #IP
spring.data.mongodb.port=27017 #端口号
spring.data.mongodb.database= school #数据库名称
3.创建和mongdb对应的实体类
package com.ljm.spring.boot.entity;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* Created by ming
* on date 2018-06-03
* time 13:00
* @Doucument表示这个类对应mongodb里面的集合也就是表
* 类似于hibrenate里面的@Table注解
*/
@Document(collection="student")
public class Student {
private String _id;
private String name;
private Integer age;
private Integer gender;
private String greadeId;
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
}
4.调用dao层方法访问mongodb数据库
import java.util.List;
/**
* @author lijunming
* @date 2018/7/18 上午1:47
*/
@RestController("/student")
public class StudentController {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 添加或修改
* @param student
* @return
*/
@RequestMapping("/save")
public String save(Student student) {
mongoTemplate.save(student);
return "0";
}
/**
* 分页查询,类似mysql的limit
* @return
*/
@RequestMapping("/find")
public String findToMongoDB() {
Query query = new Query();
query.skip(0).limit(2);
List<Student> student = mongoTemplate.find(query, Student.class);
System.out.println(student.size());
return JSON.toJSONString(student);
}
/**
* 删除对象
* @param id
* @return
*/
@RequestMapping("/remove")
public String removeToMongoDB(String id) {
Query query = Query.query(Criteria.where("_id").is(id));
mongoTemplate.remove(query, Student.class);
return "0";
}
}