首页 > 其他分享 >MongoTemplate的使用

MongoTemplate的使用

时间:2023-01-05 10:55:06浏览次数:54  
标签:criteria MongoTemplate Student 使用 new Query mongoTemplate class

常用注解:

@Document
使用@Document(org.springframework.data.mongodb.core.mapping.Document)标注Java的类名对应的MongoDB的集合名称。

@Id、@MongoId
使用@Id(org.springframework.data.annotation.Id)或@MongoId(低版本依赖可能需升级才有)映射MongoDB的_id字段,若没有使用这两个注解,则字段中名称为id的字段将自动映射到_id上。使用这两个注解可标注的字段类型为String、ObjectId(org.bson.types.ObjectId)。

@Indexed
声明该字段需要索引,建索引可以大大的提高查询效率。

@Field
使用@Field(org.springframework.data.mongodb.core.mapping.Field)字段,将Java类中字段名称与MongoDB集合中字段名称不一致的字段映射成一致的。如Java中使用了驼峰命名的startTs字段,想要映射成MongoDB中的start_ts字段就可以使用@Field完成。

@Transient
使用@Transient(org.springframework.data.annotation.Transient)标注该字段不持久化至数据库中。

@DBRef

@Data
@Document("test_dto")
public class TestDto {

    @Id
    private String id;
//    @MongoId
//    private String id;

    @Indexed
    private Integer status;

    @Field("create_ts")
    private Long createTs;

    @Transient
    private String ignoreProperty;

    @DBRef
    private List<ThirdParty> thirdParties;

}

MongoTemplate的操作

常用方法

:insert和save。两者区别如下:

插入重复数据时:insert报DuplicateKeyException提示主键重复;save对已存在的数据进行更新。
批处理操作时:insert可以一次性插入整个数据,效率较高;save需遍历整个数据,一次插入或更新,效率较低。

可使用映射对象或Query对象,使用remove进行删除。

find查询集合,findOne查询一个。

updateFirst更新一个,update更新所有符合条件的。


声明类似于关系数据库的关联关系。ps:暂不支持级联的保存功能,当你在本实例中修改了DERef对象里面的值时,单独保存本实例并不能保存DERef引用的对象,它要另外保存。

举个栗子:

// 1 新增
mongoTemplate.insert(Student.class);
mongoTemplate.save(Student.class);
mongoTemplate.insertAll(new ArrayList<Student>());
 // 2 修改
mongoTemplate.update(Student.class);
mongoTemplate.updateFirst(new Query(), new Update(), Student.class);
// 3 删除
mongoTemplate.remove(Student.class);
mongoTemplate.remove(new Query(), Student.class);
mongoTemplate.findAndRemove(new Query(), Student.class);
// 4 查询
mongoTemplate.find(new Query(), Student.class);
mongoTemplate.findById("id", Student.class);
mongoTemplate.findAll(Student.class);
// 5 统计
mongoTemplate.count(new Query(),Student.class);

查询条件

使用Query构建查询条件。Query对象是一个查询对象,用来封装给所有的条件对象;再创建一个criteria对象,用来封装所有的查询条件(类似通用mapper中的功能)

创建Query对象
Query query = new Query(criteria);

创建Criteria对象方法

直接new对象 Criteria criteria = new Criteria();

通过Criteria.where()静态方法创建 Criteria.where(“属性名”).is(“值”)(criteria.and().is()与criteria.where().is()都可以进行查询,但两种方式不能混合使用,否则不生效。)

精确查询 criteria.and(“属性名”).is(“值”);

模糊条件 criteria.and(“属性名”).regex(“值”)

Pattern pattern=Pattern.compile("^.*"+taskTypeCode+".*$", Pattern.CASE_INSENSITIVE);
criteria.and("taskTypeCode").regex(pattern);

范围查询,根据日期时间进行范围查询(其中gt为大于,lte为小等于);

SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
criteria.and("createTime").gt(format.parse(createTime));
criteria.and("endTime").lte(format.parse(endTime));

or查询,在MongoTemplate 中 or 是用 orOperator表示的;

new Criteria().and("orderId").is(item.getOrderId())
        .orOperator(
                Criteria.where("status").is(1),
                Criteria.where("status").is(null)
        );

将查询条件装载到query中

query.addCriteria(criteria);

排序 通过参数 direction 判断排序方向,sortField 为排序字段

query.with(new Sort(direction, sortField));

分页,有两种方式,一种是通过pageable 一种是 limit().skip();limit表示查询多少数据,skip表示从哪条数据查起

//第一种
Pageable pageable = new PageRequest(page, size, new Sort(new Sort.Order(direction, sortField)));
query.with(pageable);
long totoal = this.mongoTemplate.count(query, TaskMongo.class);
List<TaskMongo> listTaskMongo = this.mongoTemplate.find(query , TaskMongo.class);
//第二种
query.limit(5000).skip(5000);
List<TaskMongo> listTaskMongo = this.mongoTemplate.find(query , TaskMongo.class);

转载:https://www.cnblogs.com/wangzhebin/p/16416971.html

标签:criteria,MongoTemplate,Student,使用,new,Query,mongoTemplate,class
From: https://www.cnblogs.com/grasp/p/17026909.html

相关文章

  • 使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss
    前言什么是RSS?RSS是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS......
  • Office Tool Plus 使用
    关于office是又爱又恨,之前一直用的wps,但是也会出现不兼容问题,之前一直是激活几个月之后又不行,又要重新搞,最近发现这个工具,真的是绝了,完美解决我的问题。OfficeToolPlus......
  • jmeter 使用 ServerAgent 监控服务器
    下载、安装、运行插件(1)下载插件在Jmeter官网上下载插件管理器Plugins-manager.jar将JAR包放入到lib\ext目录下重启Jmeter,可以在选项下看到【选项】-PluginsManager......
  • SQL 分组(分区)排序获取第一条数据 ROW_NUMBER() OVER() PARTITION BY的使用
    有一张价格“订单价格设置”表如下:商品编号,价格设置时间id(类似于创建时间,创建时间约早,则act_id越小),价格的时间段,商品价格 现在要求选出每个商品价格最大,价格设......
  • git子模块的使用
    1.在项目中添加子模块命令: gitsubmoduleadd<url>例子: gitsubmoduleaddhttps://github.com/chaconinc/DbConnector此命令在当前工作目录添加了一个名为"DbConne......
  • Ansible安装及简单使用
    一、配置免密互通参考地址:https://www.cnblogs.com/qq1035807396/p/16998602.html二、开始安装Ansible1、添加repoyuminstall-yhttps://dl.fedoraproject.org/......
  • 使用 K8S 部署 RSS 全套自托管解决方案- RssHub + Tiny Tiny Rss
    前言什么是RSS?RSS是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS......
  • SQL Access group by 使用注意事项
    SQLAccessgroupby使用注意事项在MSSQL中正常的语句:selectField1,sum(Field2)asField2nfromTableswheregroupbyField1orderbyField2desc在Access......
  • 微信小程序canvas验证码生成及使用
    先看效果:  wxml:<canvasclass="v-code"bindtap="changeImg"style="width:100px;height:40px;"canvas-id="canvas"></canvas>js:constMCAP=require('.......
  • 使用Jmeter轻松实现AES加密测试
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试大家在自......