版本号:5.0.15
安装
下载MongoDB
文件,根据系统版本选择下载
可以下载下来传到服务器,也可以直接在服务器上下载
# 下载文件
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.15.tgz
# 解压
tar -zxvf mongodb-linux-x86_64-rhel70-5.0.15.tgz
# 移动
mv mongodb-linux-x86_64-rhel70-5.0.15 mongodb
# 进入mongo目录
cd mongodb
# 创建log,etc,data目录
mkdir log etc data
# 创建配置文件(配置文件内容在下面)
vim /home/software/mongodb/etc/mongodb.conf
# 启动MongoDB
cd /home/software/mongodb/bin
./mongod -f /home/software/mongodb/etc/mongodb.conf
# 连接mongo
./mongo
MongoDB
配置文件
# db存放的目录
dbpath=/home/software/mongodb/data
# 后台启动需要配置日志输出
logpath=/home/software/mongodb/log/mongodb.log
# 端口
port=27017
bind_ip = 0.0.0.0
# 设置成后台启动
fork=true
journal=false
账号
mongodb
密码和传统数据如mysql
等有些区别:mongodb
的用户名和密码是基于特定数据库的,而不是基于整个系统的。所有所有数据库db都需要设置密码。
权限说明
Read
:允许用户读取指定数据库readWrite
:允许用户读写指定数据库dbAdmin
:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin
:允许用户向system.users
集合写入,可以找指定数据库里创建、删除和管理用户clusterAdmin
:只在admin
数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。readAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的读权限readWriteAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的读写权限userAdminAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的userAdmin
权限dbAdminAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的dbAdmin
权限。root
:只在admin
数据库中可用。超级账号,超级权限
# 进入mongo
/home/software/mongodb/bin/mongo
# 切换数据库
use admin
# 创建管理员账号
db.createUser({ user: "zskj", pwd: "123456", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
# 创建root账号
db.createUser({user: "root",pwd: "123456", roles: [ { role: "root", db: "admin" } ]})
# 切换river数据库
use river
# 创建river账号
db.createUser({user: "river",pwd: "123456",roles: [ { role: "dbOwner", db: "river" } ]})
MongoDB
CRUD操作
创建操作
创建或插入操作会将新文档添加到集合中。 如果该集合当前不存在,则插入操作将创建该集合。
MongoDB
提供以下将文档插入集合的方法:
db.collection.insertOne()
db.collection.insertMany()
在MongoDB
中,插入操作针对单个集合。 MongoDB
中的所有写操作都是单个文档级别的原子操作。
读取操作
读取操作从集合中检索文档; 即查询集合中的文档。 MongoDB
提供了以下方法来从集合中读取文档:
db.collection.find()
可以指定查询过滤器或条件以标识要返回的文档。
更新操作
更新操作会修改集合中的现有文档。 MongoDB
提供了以下更新集合文档的方法:
db.collection.updateOne()
db.collection.updateMany()
db.collection.replaceOne()
在MongoDB
中,更新操作针对单个集合。 MongoDB
中的所有写操作都是单个文档级别的原子操作。
可以指定标准或过滤器,以标识要更新的文档。 这些过滤器使用与读取操作相同的语法。
删除操作
删除操作从集合中删除文档。 MongoDB
提供以下删除集合文档的方法:
db.collection.deleteOne()
db.collection.deleteMany()
在MongoDB
中,删除操作只针对单个集合。MongoDB
中的所有写操作都是单个文档级别的原子 操作。
可以指定查询过滤器或条件来标识要更新的文档,这里的过滤器和读操作的语法是一致的。
springboot
整合MongoDB
pom.xml
中引入
<!-- 引入mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
基础配置
spring:
data:
mongodb:
uri: mongodb://用户名:密码@服务器IP:端口/数据库名
# 上方为明确指定某个数据的用户进行连接
# 也可以使用admin 数据库中的用户进行连接 统一到admin 数据库进行认证
# admin 用户认证 url 写法: mongodb://账户:密码@ip:端口/数据库名?authSource=admin&authMechanism=SCRAM-SHA-1
MongoTemplate
基本方法
检索数据
// 查询name=zs
Query query = Query.query(Criteria.where("name").is("zs"));
mongoTemplate.find(query,User.class);
mongoTemplate.find(query,User.class,"mongodb_user");
// 查询所有
mongoTemplate.findAll(User.class);
mongoTemplate.findAll(User.class,"mongodb_user");
// 分页查询 page页码,pageSize每页展示几个
Pageable pageable = PageRequest.of(page - 1, pageSize, Sort.by(Sort.Order.desc("date")));
Query query = new Query().with(pageable);
return this.mongoTemplate.find(query, User.class,"mongodb_user");
// 查询多个
Query query= Query.query(Criteria.where("id").in("id1","id2","id3")).with(Sort.by(Sort.Order.desc("date")));
List<Publish> list= this.mongoTemplate.find(query, User.class);
// 查询数量
Criteria criteria = Criteria.where("userId").is("12345")
.and("name").is(new ObjectId("张三"))
.and("address").is("上海");
Query query = Query.query(criteria);
long count = this.mongoTemplate.count(query, User.class);
插入数据
List<User> list = new ArrayList<>();
User user= new User();
user.setName("admin");
user.setAddress("测试");
list.add(user);
// 保存对象到mongodb
mongoTemplate.save(user);
mongoTemplate.insert(user);
// 根据集合名称保存对象到mongodb
mongoTemplate.save(user,"mongodb_user");
mongoTemplate.insert(user,"mongodb_user");
// 根据集合名称保存list到mongodb
mongoTemplate.save(list,"mongodb_user");
mongoTemplate.insert(list,"mongodb_user");
mongoTemplate.insert(list,User.class);
更新数据
User user = new User();
user.setId("5d1312aeb1829c279c6c256b");
user.setName("admin");
user.setAddress("测试");
Query query = Query.query(Criteria.where("_id").is("5d1312aeb1829c279c6c256b"));
Update update = Update.update("name","zs");
// 更新一条数据
mongoTemplate.updateFirst(query,update, User.class);
mongoTemplate.updateFirst(query,update, "mongodb_user");
mongoTemplate.updateFirst(query,update, User.class,"mongodb_user");
// 更新多条数据
mongoTemplate.updateMulti(query,update, User.class);
mongoTemplate.updateMulti(query,update,"mongodb_user");
mongoTemplate.updateMulti(query,update, User.class,"mongodb_user");
// 更新数据,如果数据不存在就新增
mongoTemplate.upsert(query,update, User.class);
mongoTemplate.upsert(query,update,"mongodb_user");
mongoTemplate.upsert(query,update, User.class,"mongodb_user");
删除数据
List<MongoDbJavaTest> list = new ArrayList<>();
User user= new User();
user.setId("5d1312aeb1829c279c6c256b");
list.add(user);
Query query = Query.query(Criteria.where("_id").in("5d1312aeb1829c279c6c256b","5d13133ab1829c29d02ce29c"));
// 根据条件删除
mongoTemplate.remove(query);
mongoTemplate.remove(user);
mongoTemplate.remove(User.class);
// 根据条件删除(可删除多条)
mongoTemplate.remove(query,User.class,"mongodb_user");