spring data mongo API learn(转)
显示操作mongo的语句,log4j里面加入:
- log4j.logger.org.springframework.data.mongodb.core=DEBUG, mongodb
- log4j.appender.mongodb=org.apache.log4j.ConsoleAppender
- log4j.appender.mongodb.Target=System.out
- log4j.appender.mongodb.Threshold=DEBUG
- log4j.appender.mongodb.ImmediateFlush=true
- log4j.appender.mongodb.layout=org.apache.log4j.PatternLayout
- log4j.appender.mongodb.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %X{RequestId} - %m%n
MongoOptions/MongoTemplate:
常见查询方法:
- public <T> T findOne(Query query, Class<T> entityClass)
- public boolean exists(Query query, Class<?> entityClass)
- public <T> List<T> find(Query query, Class<T> entityClass)
- public <T> T findById(Object id, Class<T> entityClass)
- public <T> T findAndModify(Query query, Update update, Class<T> entityClass)
- public <T> T findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> entityClass)
- public class FindAndModifyOptions {
- <strong><span style="white-space:pre"> </span>boolean returnNew; // 是否返回更新后的值
- <span style="white-space:pre"> </span>boolean upsert; // 没有找到是否插入
- <span style="white-space:pre"> </span>boolean remove; // 找到是否删除</strong>
- }
- public <T> T findAndRemove(Query query, Class<T> entityClass)
- public long count(Query query, Class<?> entityClass)
- public void insert(Object objectToSave)
- public void insert(Collection<? extends Object> batchToSave, Class<?> entityClass)
- public void insertAll(Collection<? extends Object> objectsToSave)
- public void save(Object objectToSave)
- public WriteResult upsert(Query query, Update update, Class<?> entityClass)
- public WriteResult updateFirst(Query query, Update update, Class<?> entityClass)
- public WriteResult updateMulti(Query query, Update update, Class<?> entityClass)
- public WriteResult remove(Object object)
- public WriteResult remove(Query query, String collectionName)
- public <T> List<T> findAll(Class<T> entityClass)
- public <T> List<T> findAllAndRemove(Query query, Class<T> entityClass)
- public DB getDb()
- public String getCollectionName(Class<?> entityClass)
- public <T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction, Class<T> entityClass)
- public <T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,MapReduceOptions mapReduceOptions, Class<T> entityClass)
- public <T> GroupByResults<T> group(String inputCollectionName, GroupBy groupBy, Class<T> entityClass)
- public <O> AggregationResults<O> aggregate(TypedAggregation<?> aggregation, Class<O> outputType)
- public <O> AggregationResults<O> aggregate(Aggregation aggregation, Class<?> inputType, Class<O> outputType)
注解式查询:
- 1 一个方法名查询中同一个属性不能出现2次 可以创意@Query方法查询
- 2 @Query:
- value 查询语句
- count 作为统计的查询 返回int值
- delete 作为删除语句并返回删除后的文档集合
- fields 返回哪些字段
- 示例:
- @Query(count = true, value = "{'$and':[{'tenant':?3},{'reportStatus':?0}," +
- " {'dealTime':{'$gte':?1}}, {'dealTime':{'$lte':?2}}]}")
- int countByStatusAndDealTimeBetween
- (ReportStatus status, Date begin, Date end, long tenant);
Sort:
- private final List<Order> orders;
- public Sort and(Sort sort) {
- if (sort == null) {
- return this;
- }
- ArrayList<Order> these = new ArrayList<Order>(this.orders);
- for (Order order : sort) {
- these.add(order);
- }
- return new Sort(these);
- }
Query:
- private Sort sort;
- private int skip;
- private int limit;
- public Query skip(int skip) {
- this.skip = skip;
- return this;
- }
- public Query limit(int limit) {
- this.limit = limit;
- return this;
- }
- public Query with(Pageable pageable) {
- if (pageable == null) {
- return this;
- }
- this.limit = pageable.getPageSize();
- this.skip = pageable.getOffset();
- return with(pageable.getSort());
- }
- public Query with(Sort sort) {
- if (sort == null) {
- return this;
- }
- for (Order order : sort) {
- if (order.isIgnoreCase()) {
- throw new IllegalArgumentException(String.format("Gven sort contained an Order for %s with ignore case! "
- + "MongoDB does not support sorting ignoreing case currently!", order.getProperty()));
- }
- }
- if (this.sort == null) {
- this.sort = sort;
- } else {
- this.sort = this.sort.and(sort);
- }
- return this;
- }
- private final Map<String, CriteriaDefinition> criteria = new LinkedHashMap<String, CriteriaDefinition>();
- public static Query query(CriteriaDefinition criteriaDefinition) {
- return new Query(criteriaDefinition);
- }
- public Query() {}
- public Query(CriteriaDefinition criteriaDefinition) {
- addCriteria(criteriaDefinition);
- }
- public Query addCriteria(CriteriaDefinition criteriaDefinition) {
- CriteriaDefinition existing = this.criteria.get(criteriaDefinition.getKey());
- String key = criteriaDefinition.getKey();
- if (existing == null) {
- this.criteria.put(key, criteriaDefinition);
- } else {
- throw new InvalidMongoDbApiUsageException("Due to limitations of the com.mongodb.BasicDBObject, "
- + "you can't add a second '" + key + "' criteria. " + "Query already contains '"
- + existing.getCriteriaObject() + "'.");
- }
- return this;
- }
Criteria:
- private String key;
- private List<Criteria> criteriaChain;
- private LinkedHashMap<String, Object> criteria = new LinkedHashMap<String, Object>();
- private Object isValue = NOT_SET;
- public static Criteria where(String key) {
- return new Criteria(key);
- }
- /**
- * Static factory method to create a Criteria using the provided key
- *
- * @return
- */
- public Criteria and(String key) {
- return new Criteria(this.criteriaChain, key);
- }
- andOperator
- is ne lt lte gt gte in nin mod all size exits type not regex
聚合:
- /**
- * db.videos.aggregate(
- [
- { $match: { "frags.isnew" : true } },
- { $unwind: "$frags" },
- { $match: { "frags.isnew" : true } },
- { $group: {
- _id: {cat1:"$cat1"},
- count: { $sum: 1 },
- publishdate2: { $max: "$publishdate"}
- }
- }
- ]
- )
- */
- Aggregation agg = newAggregation(
- project("frags","cat1","publishdate"),//挑选所需的字段
- match(
- Criteria.where("frags.isnew").is(Boolean.TRUE)
- .and("cat1").in(importantCat1List)
- ),//筛选符合条件的记录
- unwind("frags"),//如果有MASTER-ITEM关系的表,需同时JOIN这两张表的,展开子项LIST,且是内链接,即如果父和子的关联ID没有的就不会输出
- match(Criteria.where("frags.isnew").is(Boolean.TRUE)),
- group("cat1")//设置分组字段
- .count().as("updateCount")//增加COUNT为分组后输出的字段
- .last("publishdate").as("publishDate"),//增加publishDate为分组后输出的字段
- project("publishDate","cat1","updateCount")//重新挑选字段
- .and("cat1").previousOperation()//为前一操作所产生的ID FIELD建立别名
- );
————————————————
版权声明:本文为CSDN博主「weihainan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010084868/article/details/52625819
spring data mongo API learn(转)的更多相关文章
- MongoDB分组汇总操作,及Spring data mongo的实现
转载请在页首注明作者与出处 一:分组汇总 1.1:SQL样例 分组汇总的应用场景非常多,比如查询每个班级的总分是多少,如果用关系形数据库,那么sql是这样子的 ),class from score g ...
- Spring Data REST API集成Springfox、Swagger
原文: Documenting a Spring Data REST API with Springfox and Swagger 使用Spring Date REST,你可以迅速为Spring Da ...
- mongo学习使用记录2 spring data
spring data mongo 打印mongo NoSql语句 log4j.properties log4j.rootLogger=INFO, stdout log4j.logger.org.sp ...
- Spring Data JPA Tutorial Part Nine: Conclusions(未翻译)
This is the ninth and the last part of my Spring Data JPA tutorial. Now it is time to take a look of ...
- Spring Data之Example<>
简单CRUD之Example动态查询 简单介绍 (部分口水话,部分来自网络,代码永远自产) 使用过Spring全家桶的各位大佬应该都知道,Spring Data这个是Spring对持久层框架的封装,比 ...
- 解决neo4j @Transactional 与Spring data jpa @Transactional 冲突问题,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate,以及解决@Version失效问题
之前mybatis特别流行,所以前几个项目都是用@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider 加反射泛型封装了一些通用 ...
- 学习Spring Data JPA
简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特殊 ...
- Spring Data Redis入门示例:基于Jedis及底层API (二)
使用底层API:RedisConnectionFactory和RedisConnection可以直接操作Redis,下面是一个简单的例子: ### Maven依赖 <properties> ...
- [Spring Data MongoDB]学习笔记--注册一个Mongo实例
1. 通过Java based bean metadata @Configuration public class AppConfig { public @Bean Mongo mongo() thr ...
随机推荐
- 字符串——AC自动机
目录 一.前言 二.思路 三.代码 四.参考资料 一.前言 以前一直没学AC自动机,主要是被名字吓到了,自动AC,这么强的名字肯定很难,学了后才发现,其实不难. AC自动机并不是Acept autom ...
- Source 介绍
!!!1.Avro Source 监听AVRO端口来接受来自外部AVRO客户端的事件流. 利用Avro Source可以实现多级流动.扇出流.扇入流等效果. 另外也可以接受通过flume提供的Avro ...
- sftp服务器配置
环境依赖:openssh-server >=4.8 //ssh -V 查看 安装环境: centos6,centos7 1.创建用户组 sftp groupadd sftp 2.创建登录用 ...
- 云数据库 MariaDB 版
基于MariaDB企业版全球独家合作认证,提供Oracle兼容性及众多企业级数据库特性.支持包括MySQL InnoDB等多种存储引擎,为不同需求的用户提供灵活的选择. 请看视频简介 优势 Oracl ...
- 【Vue高级知识】细谈Vue 中三要素(响应式+模板+render函数)
[Vue高级知识]细谈Vue 中三要素(响应式+模板+render函数):https://blog.csdn.net/m0_37981569/article/details/93304809
- 基于VS搭建OpenCV环境
OpenCV OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行, ...
- 福建工程学院第十四届ACM校赛B题题解
第二集,未来的我发量这么捉急的吗 题意: 有n个数,请问有多少对数字(i,j)(1<=i<j<=n),满足(a[i]^a[j])+((a[i]&a[j])<<1) ...
- [Nest] 05.nest之数据库
数据库 Nest 与数据库无关,允许您轻松地与任何 SQL 或 NoSQL 数据库集成.根据您的偏好,您有许多可用的选项.一般来说,将 Nest 连接到数据库只需为数据库加载一个适当的 Node.js ...
- JS图片轮播[左右轮播
直接可以用,网上摘下来的! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- 部署master节点组件
部署master节点组件 master节点的组件有:kube-apiserver,kube-scheduler,kube-controller-manager 大致安装步骤如下: # mkdir -p ...