MongoDB中文文档 (opens new window)

版本号:5.0.15

安装

下载MongoDB文件,根据系统版本选择下载

下载地址页面 (opens new window)

可以下载下来传到服务器,也可以直接在服务器上下载

# 下载文件
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");