MongoTemplate对mongodb的增删改查基本操作

 

前言 

因为在做的一个demo项目需要使用mongodb这种非关系型数据库,这里记录下这次的学习的收获,主要是用springdata的MongoTemplate对其进行的基本增删改查操作。对于mogodb数据库安装和下载的内容网上有很多博客可以借鉴,这里就不进行陈述,不过本人还是建议作为一名开发人员,像数据库这种的还是在linux系统中安装(可以安装在虚拟机中),这样更接近真实的开发,以下内容是鉴于已安装了mongodb数据,并且对mongodb数据库的一些基本知识有一些了解的前提展开。

(CentOS7) Linux环境下的mongodb数据库的安装及配置

正文

1.首先需要搭建项目工程,然后在项目中的pom.xml导入依赖,这里是springboot项目。

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
	        <version>2.0.0.RELEASE</version>
       </dependency>

2.创建application.yml


uri连接的方式:
#spring:
#  data:
#    mongodb:
#      uri: mongodb://用户名:密码@域名:端口/数据库名

 3.启动项目,看看控制台是否报错

4.编写实体类,用来与mongo数据库的集合能进行映射

//这里对应mongodb数据库的集合,collection对应集合名称 不写则默认对应集合名,为首字母小写的类名
@Document(collection = "ucm_project_credit_positions")
public class UcmProjectCreditPositionsBO implements Serializable{
    
//主键标识,该属性的值会自动对应mongodb的主键字段"_id",如果该属性名就叫“id”,则该注解可以省略,否则必须写
    @Id
    private String id;

    //项目基本信息
    /**
     * 录入日期
     */
   //@Field("")该属性对应mongodb的字段的名字,如果一致,则无需该注解
    @Field("oc_date")
    private Integer ocDate;

    public void parseOcDate(String ocDate) {
        this.setOcDate((new BigDecimal(ocDate)).intValue());
    }
    /**
     * 业务部门
     */
    @Field("business_unit")
    private String businessUnit;

    public void parseBusinessUnit(String businessUnit) {
        this.setBusinessUnit(businessUnit);
    }
    /**
     * 项目类别
     * 编号
     */
    @Field("project_type_code")
    private String projectTypeCode;

    public void parseProjectTypeCode(String projectTypeCode) {
        this.setProjectTypeCode(projectTypeCode);
    }

    /**
     * 项目类别
     * 名称
     */
    @Field("project_type_name")
    private String projectTypeName;

    public void parseProjectTypeName(String projectTypeName) {
        this.setProjectTypeName(projectTypeName);
    }
    /**
     * 项目编号
     */
    @Field("project_no")
    private String projectNo;

    public void parseProjectNo(String projectNo) {
        this.setProjectNo(projectNo);
    }
    /**
     * 项目名称
     */
    @Field("project_name")
    private String projectName;

    public void parseProjectName(String projectName) {
        this.setProjectName(projectName);
    }
    /**
     * 项目评级
     */
    @Field("project_rating")
    private String projectRating;

    public void parseProjectRating(String projectRating) {
        this.setProjectRating(projectRating);
    }
    /**
     * 融资主体
     */
    @Field("financier_info")
    private List<FinancierBO> financierInfo;
}

 5.以上步骤完成,即可用mongotemplate进行操作,注入MongoTemplate

@Service
public class UcmProjectCreditPositionsServiceImpl implements UcmProjectCreditPositionsService { 
@Autowired
 private MongoTemplate mongoTemplate;
 
  /**
   * 根据日期和项目名称查询单个ucm对象
   * @param date      系统当前日期
   * @param ProjectNo 项目编号
   * @return null, 或者符合的 UcmProjectCreditPositionsBO 对象
   */
 public UcmProjectCreditPositionsBO getUcmProjectCreditPositionsBoByDateAndProjectNo(Date date, String ProjectNo) {
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String now = dateFormat.format(date);
        Query query = new Query();
        query.addCriteria(Criteria.where("project_no").is(ProjectNo));
        query.addCriteria(Criteria.where("oc_date").is(Integer.parseInt(now)));
        UcmProjectCreditPositionsBO ucm = mongoTemplate.findOne(query, UcmProjectCreditPositionsBO.class, "ucm_project_credit_positions");
        return ucm;
    }

 /**
     * 按时间查询多个ucm对象
     *
     * @param date 系统当前日期
     * @return null, List<UcmProjectCreditPositionsBO>
     */
    public List<UcmProjectCreditPositionsBO> getUcmProjectCreditPositionsBOListByDate(Date date) {
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String now = dateFormat.format(date);
        Query query = new Query();
        query.addCriteria(Criteria.where("oc_date").is(Integer.parseInt(now)));
        List<UcmProjectCreditPositionsBO> ucmList = mongoTemplate.find(query, UcmProjectCreditPositionsBO.class, "ucm_project_credit_positions");
        return ucmList;
    }


}

模糊查询的方式: ^.  开使,*  代表所有,  .*$ 结束。

//模糊查询的模式
Pattern pattern = Pattern.compile("^.*" + ucmObj.getProjectName() + ".*$", Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("project_name").regex(pattern));

文档内嵌查询方式: 

query.addCriteria(Criteria.where("financier_info.rating").is(rating));

in查询方式,这里 先查询是数据库里已有的数据,再进行删除(批量删除),再插入新数据(批量插入)

    DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
    String now = dateFormat.format(new Date());
    List<Object> pnoList = pnoCollection(newUcmList);
    if (pnoList.get(1) != null) {
        Query query = new Query();
        //mongo数据量中的日期是int类型,需要进行字符串转整型
        query.addCriteria(Criteria.where("oc_date").is(Integer.parseInt(now)));
        query.addCriteria(Criteria.where("project_no").in(((List<String>) pnoList.get(0))));
        mongoTemplate.remove(query, "ucm_project_credit_positions");
        mongoTemplate.insert(((List<UcmProjectCreditPositionsBO>) pnoList.get(1)), "ucm_project_credit_positions");
      }

添加文档:可以用 insert 和 save 两种方式添加单条或多条文档 ,它们两的区别就是,save操作,如果要插入的文档与集合中的已有文档的id相同,则会进行更新已有的文档,insert是直接插入,若有id相同则直接报错,由此可见,save可用于多个字段都被需要进行修改的场景。

                mongoTemplate.insert(convertUcm, "ucm_project_credit_positions");
                mongoTemplate.save(convertUcm, "ucm_project_credit_positions");

 

值得一提的是,用mongotemplate的查询,映射默认是映射集合中的所有数据(文档),当有符合的查询条件时才筛选出符合查询条件的数据(文档),多个query.addCriteria(XXXX)相当于多条件的并且,内嵌文档可以通过 financier_info.rating这种形式来进行表示,mogotemplate的操作其实也是相对应mongodb命令操作行的形式。其它的复杂查询、组合、聚合,范围等操作,等学会了再记录,以上内容粗浅,先记录避免以后忘记,也顺便给其它新学者提供一个参考。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值