springboot连接mongo实现基本查找

文章讲述了在使用SpringBoot连接MongoDB数据库时遇到的身份验证错误,通过添加`authSource`参数解决,并展示了如何创建MongoDB的实体类以及编写查询语句。同时提到了前端开发中处理数据返回时的注意事项,特别是当后端返回null时前端的处理方式。
摘要由CSDN通过智能技术生成

今天是实现连接mongo数据库,查询数据,以前没接触过非关系型数据库。。所以弄得很慢。。。

连接使用mongo数据库需要导入的依赖

在yml中配置数据库:

//这样配置数据库运行报错了  
spring:
     data:
        mongodb:
            uri: mongodb://'数据库名':'数据库密码'@'数据库地址':'端口号'/'数据库名'

//错误如下:
Exception authenticating MongoCredential{mechanism=SCRAM-SHA-256, userName='pds', source='pds', password=<hidden>, mechanismProperties=<hidden>}; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-256, userName='pds', source='pds', password=<hidden>, mechanismProperties=<hidden>}


//应在后面加上一段,正确的为:

spring:
     data:
        mongodb:
            uri: mongodb://'数据库名':'数据库密码'@'数据库地址':'端口号'/'数据库名'?authSource=admin&authMechanism=SCRAM-SHA-1

GPT解释:authSource=admin 中的 authSource 表示在进行身份验证时,使用哪个数据库来验证用户名和密码。在 MongoDB 中,一个服务器可以包含多个数据库。如果没有指定 authSource,MongoDB 将使用连接字符串中指定的默认数据库(通常是连接字符串中最后一个斜杠后面的那个字符串)来验证身份。

在这个例子中,指定了 authSource=admin,表示在进行身份验证时使用 admin 数据库来验证用户名和密码。这意味着,要求在连接 MongoDB 时提供 admin 数据库的用户名和密码。

需要注意的是,对于不同的 MongoDB 版本,authSource 的含义可能会有所不同。在 MongoDB 3.0 及以上版本中,authSource 指定的是进行身份验证的数据库。但在较早的版本中,authSource 与 authdb 参数是等效的,用于指定要连接的数据库。因此,在编写代码时需根据具体的 MongoDB 版本来确定使用哪种方式进行设置。

另外,除了 authSource,还可以使用 authMechanism 参数来指定要使用的身份验证机制,例如 SCRAM-SHA-1、MONGODB-CR 等。

 创建对应的实体类:

//collection是指定mongo数据库中的哪个collection
/**
 * mongo数据库中的data集合实体类
 */

@Document(collection = "data")
@lombok.Data
@AllArgsConstructor
@NoArgsConstructor
public class Data {


    private String _id;

    @Field(value = "uuid")
    private String uuid;

    @Field(value = "data")
    private String data;

    @Field(value = "sign")
    private String sign;

    @Field(value = "request_id")
    private String request_id;

    @Field(value = "_class")
    private String _class;

}

mongo数据库的查询与SQL型的数据库有些不同。

mongo不需要创建Mapper,直接创建service和service的实现类就可以,查询语句可以在service的实现类中写,service就相当于dao层了。如下:

/**
 * data集合接口方法
 */

public interface IDataService{
    /**
     * 跟据uuid查询返回一个数组
     * @param id
     * @return
     */
    List<Data> findByUuid(String id);

    /**
     * 根据uuid查询返回一个对象
     * @param uuid
     * @return
     */
    Data findByUuidOne(String uuid);
    
}
/**
 * data集合接口方法实现类
 */
@Service
public class DataServiceImpl implements IDataService {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<Data> findByUuid(String uuid){
        Query query = Query.query(Criteria.where("uuid").is(uuid));
        List<Data> result = mongoTemplate.find(query,Data.class);
        return result;
    }

    @Override
    public Data findByUuidOne(String uuid){
        Query query = Query.query(Criteria.where("uuid").is(uuid));
        Data result = mongoTemplate.findOne(query,Data.class);
        return result;
    }

}

Spring Boot中快速操作Mongodb看这里:

Spring Boot中快速操作Mongodb-腾讯云开发者社区-腾讯云

另外今天在写前端时,使用elementui时,要注意组件想接收的数据是一个对象还是一个数组,定义的参数也不同,否则绑定数据的时候会报错。

此外今天还遇到一个情况:在后端未查询到数据,返回null到前端时,前端代码写错,导致dialog无法关闭。

test(id).then(response => {
                
                     console.log(response);
                    this.form = response.data;

            })

上面这种写法会导致当后端未查到数据返回null时,响应数据的object里,没有data,只有msg和code。这样一来代码就会报错,停留在this.form = response.data;这一句中,所以dialog无法关闭。

添加一个简单的判断即可:

//注意判断条件不是response != null
//因为后端返回null,相应数据object还是存在,只是没有了data
test(id).then(response => {
                if(response.data != null){
                    console.log(response);
                    this.form = response.data;
                }
            })

:data="test"为单项绑定,:model="test"为双向绑定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值