springboot中使用mongodb进行简单的查询

文章目录

引言

应用程序中,通常会使用两种数据库,一种是关系型数据库如mysql等,另一种则是非关系型数据库例如mongodb,今天我们就来讲一讲如何在springboot中使用mongodb。

依赖

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置文件

这里配置的单点

yaml 复制代码
spring:
  data:
    mongodb:
      username: calculate
      password: 1234calculate
      host: 120.79.128.190
      port: 27017
      database: data_db

代码编写

1、实体类

这里新建了一个新闻类的实体来做出说明

java 复制代码
@Data
@Document(value = "test")
public class NewsMg {

	@Id
	private String id;
	
    /**
     * 标题
     */
    @Field(value = "title")
    private String title;

    /**
     * 分类
     */
    @Field(value = "news_type")
    private String type;

    /**
     * 描述
     */
    @Field(value = "abstract")
    private String describe;

    /**
     * 链接
     */
    @Field(value = "link")
    private String link;

    /**
     * 来源
     */
    @Field(value = "source")
    private String source;

    /**
     * 作者
     */
    @Field(value = "author")
    private String author;

    /**
     * 发表时间
     */
    @Field(value = "date")
    private Long resourceTime;

    /**
     * 重要性
     */
    @Field(value = "importance")
    private String importance;
}
  1. @Document注解
    这是第一个核心注解,mongodb中我们不是以表来指明,而是以文档,而这个注解最核心的就是collection或者是value,例如 @Document(value = "news"),这里注解在实体类上,表示将此实体类标注为文档类型,并且文档名为news,当然也可以不用使用这个文档名,后续会讲解
  2. @Field(value = "vol")
    这个和@TableField一样,指定是一个字段
  3. @Id
    这个注解会指定mongodb的id,插入文档时会自动生成这个id
  4. 无需注意字段的类型,这里通过springboot会自动把字段映射到我们的实体上

2、使用repository查询

我们只需要继承接口MongoRepository<T,ID>接口即可

java 复制代码
/**
 * 使用注解@Repository
 * 继承后实体类和主键类型
 */
@Repository
public interface newsRepository extents MongoRepository<NewsMg,String>{
	
	/**
	 * 通过id列表查找所有
	 */
	List<NewsMg> getAllByIdIn(List<String> ids);
	
	/**
	 * 通过id查找
	 */
	NewsMg findById(String id);
}

这里可以使用很多,例如 findByXXInORYY(List XX, String YY),可以通过OR和AND连接条件,当然也可以使用注解 @Aggregation(pipeline={})直接写查询语句来实现复杂的查询

但是复杂查询也可以通过下面方式进行查询

3、使用MongoTemplate查询

相比上一个查询,这里的查询操作就稍微显得繁琐一点了

java 复制代码
	/**
	 * 注入bean 
	 */
	 @Resource
	 private MongoTemplate mongoTemplate;
	 
	 public List<RealtimeOrder> queryAfter(Long time) {
	 	// 表名,也可以不用指定
        String tableName = "table_name";
		// 构造查询条件,这里where是字段名,后续可以跟is/gt/lt等全等比较条件
		// 如果还有字段,可以使用and(字段名)或者or(字段名)继续追加条件
		Criteria criteria = Criteria.where("字段名").gte(time);
		// 构造Query
		Query query = Query.query(criteria);
		// 这里query还可以追加排序等操作
		// 例如 query.with(Sort.by(Sort.Order.desc("date")))
		// limit, query.limit(查询条数)
		// query.addCriteria() 再次追加查询条件

		// 查询 使用mongoTemplate的方法
		// 查询所有
		mongoTemplate.find(Query.query(criteria), NewsMg.class, tableName);
		// 不指定表名则直接查询实体类注解Document中的集合名,这里就是 test
		mongoTemplate.find(Query.query(criteria), NewsMg.class);
       	// 还有 findOne、findAll、count等方法,能够满足我们最基本的查询
    }
相关推荐
GetcharZp13 小时前
GitHub 49K+ Star!C++ 开发者必知的 JSON 神级库:从零到精通全指北
后端
xujinwei_gingko13 小时前
SpringBoot整合WebSocket
spring boot·后端·websocket
智码看视界13 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
程序员cxuan13 小时前
Claude Fable 5 来了
人工智能·后端·程序员
JS菌13 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
wang090714 小时前
自己动手写一个spring之IOC_2
java·后端·spring
来杯@Java14 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
ltl14 小时前
推理退化:为什么大模型会输出乱码、死循环和无意义文本
后端
ltl15 小时前
架构视图与文档:C4 模型从入门到实战
后端
invicinble15 小时前
easyexcel开发全域理解
spring boot