MongoDB--Spring

官网下载 MongoDB


mongodb官网

下载后解压,配置文件

cfg 复制代码
# 数据存储目录
storage:
  dbPath: D:\mongodb8\data\db
  

# 日志配置
systemLog:
  destination: file
  path: D:\mongodb8\log\mongod.log
  logAppend: true

# 网络配置
net:
  port: 27017
  bindIp: 127.0.0.1  
# 新增:启用身份验证
security:
  authorization: enabled  

官网下载 momgosh

mongosh官网下载

启动mongodb,整合spring

maven 依赖

xml 复制代码
    <!--        mongoDB-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version>3.0.0</version>
            <scope>compile</scope>
        </dependency>

yml配置

yml 复制代码
    mongodb:
      database: testdb
#      uri: mongodb://localhost:27017/testdb
      username: appuser
      password: App@123
#      必须是admin
      authentication-database: testdb
      host: localhost:27017
      port: 27017

启动项目配置时,必须使得用户有操作database=testdb数据库的权限 ,如果没权限则后需得赋予权限;

另一个authentication-database: testdb 即用户在testdb能查到,否则就会提示未授权

简单的CRUD

java 复制代码
 

/**
 * @className: MongoDbController
 * @author: lcy
 * @date: 2026/4/17 9:07
 * @Version: 1.0
 * @description:
 */
@RestController
@RequestMapping("/Mongo")
public class MongoDbController {


    @Autowired
    private MongoTemplate mongoTemplate;

    @PostMapping("/save")
    public Fruit addMongoDbData(@RequestBody Fruit fruit) {
        Fruit insert = mongoTemplate.insert(fruit);
        return insert;
    }

    @PostMapping("/saveBatch")
    public List<Fruit> addBatchMongoDbData(@RequestBody List<Fruit> fruits) {
        List<Fruit> fruitList = mongoTemplate.insert(fruits, "fruitList").stream().toList();
        return fruitList;
    }


    @GetMapping("/selectOne")
    public Fruit getOneMongoDbData(String serialNumber) {
        Query query = new Query();

        query.addCriteria(Criteria.where("serialNumber").is(serialNumber));
        List<Fruit> fruits = mongoTemplate.find(query, Fruit.class);
        if (!CollectionUtils.isEmpty(fruits)) {
            return fruits.stream().findFirst().get();
        }
        return null;
    }
    @GetMapping("/selectAll")
    public  List<Fruit> getAllMongoDbData(String collectionName) {
        List<Fruit> fruits = mongoTemplate.find(new Query(), Fruit.class,collectionName);

        return fruits;
    }
    @GetMapping("/selectOne2")
    public Fruit getOneMongoDbData2(String serialNumber) {
        boolean b = mongoTemplate.collectionExists("fruitList");
        boolean b1 = mongoTemplate.collectionExists(Fruit.class);// 获取Fruit 类名,底层还是String
        if (b) {
            Query query = new Query();

            query.addCriteria(Criteria.where("serialNumber").is(serialNumber));
            List<Fruit> fruits = mongoTemplate.find(query, Fruit.class, "fruitList");
            if (!CollectionUtils.isEmpty(fruits)) {
                return fruits.stream().findFirst().get();
            }
        }

        return null;
    }

    @DeleteMapping("/removeFruit")
    public Long removeDataBySth(String fruitName) {

        Query query = new Query();
        query.addCriteria(Criteria.where("fruitName").is(fruitName));
        DeleteResult deleteResult = mongoTemplate.remove(query, "fruit");
        if (deleteResult.wasAcknowledged()) {
            return deleteResult.getDeletedCount();
        }
        return 0L;
    }

    @DeleteMapping("/del/collection")
    public void delCollectionData(String collectionName) {
        mongoTemplate.dropCollection(collectionName);
    }


}
没有权限报错
复制代码
[dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 13 (Unauthorized): 'not authorized on gavin to execute command { insert: "fruit", ordered: true, $db: "gavin", lsid: { id: UUID("5cc08927-d5ff-4fe5-a39f-c9037991cd31") } }' on server localhost:27017. The full response is {"ok": 0.0, "errmsg": "not authorized on gavin to execute command { insert: \"fruit\", ordered: true, $db: \"gavin\", lsid: { id: UUID(\"5cc08927-d5ff-4fe5-a39f-c9037991cd31\") } }", "code": 13, "codeName": "Unauthorized"}] with root cause

com.mongodb.MongoCommandException: Command failed with error 13 (Unauthorized): 'not authorized on gavin to execute command { insert: "fruit", ordered: true, $db: "gavin", lsid: { id: UUID("5cc08927-d5ff-4fe5-a39f-c9037991cd31") } }' on server localhost:27017. The full response is {"ok": 0.0, "errmsg": "not authorized on gavin to execute command { insert: \"fruit\", ordered: true, $db: \"gavin\", lsid: { id: UUID(\"5cc08927-d5ff-4fe5-a39f-c9037991cd31\") } }", "code": 13, "codeName": "Unauthorized"}

一般是配置文件 数据库跟用户 相关的配置有问题,请核对

相关推荐
CodexDave9 小时前
PostgreSQL 明明有索引却选了 Nested Loop:从行数误判修正执行计划
数据库·postgresql·执行计划·扩展统计·nestedloop
czhaii10 小时前
STC ai助手单片机工程项目创建实例
数据库·mongodb
山峰哥10 小时前
数据库性能救星:Explain执行计划深度拆解
服务器·开发语言·数据库·sql·启发式算法
oradh11 小时前
Oracle 11g rac IP地址修改(public ip、vip、scan ip、priviate ip)
数据库·tcp/ip·oracle·rac ip地址修改
IT_Octopus11 小时前
Spring Boot 中 ThreadLocal 请求上下文的完整生命周期
java·spring boot·spring
YOU OU11 小时前
Redis哨兵 & 集群
数据库·redis·sentinel
小罗水11 小时前
第8章 文档解析与文本切片
数据库·spring·spring cloud·微服务
瞬间&永恒~12 小时前
【MySQL】 主从复制多拓扑搭建实验
运维·数据库·mysql·云原生
han_hanker12 小时前
sql语法 DECODE, CASE ... WHEN
数据库·sql·oracle
井川廊咏12 小时前
vi 删除指定范围的行,不用再反复按 dd
数据库·mysql