显示操作mongo的语句,log4j里面加入:

  1. log4j.logger.org.springframework.data.mongodb.core=DEBUG, mongodb
  2. log4j.appender.mongodb=org.apache.log4j.ConsoleAppender
  3. log4j.appender.mongodb.Target=System.out
  4. log4j.appender.mongodb.Threshold=DEBUG
  5. log4j.appender.mongodb.ImmediateFlush=true
  6. log4j.appender.mongodb.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.mongodb.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %X{RequestId} - %m%n

MongoOptions/MongoTemplate:

常见查询方法:

  1. public <T> T findOne(Query query, Class<T> entityClass)
  2. public boolean exists(Query query, Class<?> entityClass)
  3. public <T> List<T> find(Query query, Class<T> entityClass)
  4. public <T> T findById(Object id, Class<T> entityClass)
  5.  
  6. public <T> T findAndModify(Query query, Update update, Class<T> entityClass)
  7. public <T> T findAndModify(Query query, Update update, FindAndModifyOptions options, Class<T> entityClass)
  8.  
  9. public class FindAndModifyOptions {
  10. <strong><span style="white-space:pre"> </span>boolean returnNew;   // 是否返回更新后的值
  11. <span style="white-space:pre"> </span>boolean upsert;      // 没有找到是否插入 
  12. <span style="white-space:pre"> </span>boolean remove;      // 找到是否删除</strong>
  13. }
  14.  
  15. public <T> T findAndRemove(Query query, Class<T> entityClass)
  16. public long count(Query query, Class<?> entityClass)
  17.  
  18. public void insert(Object objectToSave)
  19. public void insert(Collection<? extends Object> batchToSave, Class<?> entityClass)
  20. public void insertAll(Collection<? extends Object> objectsToSave)
  21.  
  22. public void save(Object objectToSave)
  23.  
  24. public WriteResult upsert(Query query, Update update, Class<?> entityClass)
  25. public WriteResult updateFirst(Query query, Update update, Class<?> entityClass)
  26. public WriteResult updateMulti(Query query, Update update, Class<?> entityClass)
  27.  
  28. public WriteResult remove(Object object)
  29. public WriteResult remove(Query query, String collectionName)
  30.  
  31. public <T> List<T> findAll(Class<T> entityClass)
  32. public <T> List<T> findAllAndRemove(Query query, Class<T> entityClass)
  33.  
  34. public DB getDb()
  35. public String getCollectionName(Class<?> entityClass)
  36.  
  37. public <T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction, Class<T> entityClass)
  38. public <T> MapReduceResults<T> mapReduce(String inputCollectionName, String mapFunction, String reduceFunction,MapReduceOptions mapReduceOptions, Class<T> entityClass)
  39.  
  40. public <T> GroupByResults<T> group(String inputCollectionName, GroupBy groupBy, Class<T> entityClass)
  41.  
  42. public <O> AggregationResults<O> aggregate(TypedAggregation<?> aggregation, Class<O> outputType)
  43. public <O> AggregationResults<O> aggregate(Aggregation aggregation, Class<?> inputType, Class<O> outputType)

注解式查询:

  1. 1 一个方法名查询中同一个属性不能出现2 可以创意@Query方法查询
  2. 2 @Query
  3. value 查询语句
  4. count 作为统计的查询 返回int
  5. delete 作为删除语句并返回删除后的文档集合
  6. fields 返回哪些字段
  7.  
  8. 示例:
  9. @Query(count = true, value = "{'$and':[{'tenant':?3},{'reportStatus':?0}," +
  10. " {'dealTime':{'$gte':?1}}, {'dealTime':{'$lte':?2}}]}")
  11. int countByStatusAndDealTimeBetween
  12. (ReportStatus status, Date begin, Date end, long tenant);

Sort:

  1. private final List<Order> orders;
  2.  
  3. public Sort and(Sort sort) {
  4.  
  5. if (sort == null) {
  6. return this;
  7. }
  8.  
  9. ArrayList<Order> these = new ArrayList<Order>(this.orders);
  10.  
  11. for (Order order : sort) {
  12. these.add(order);
  13. }
  14.  
  15. return new Sort(these);
  16. }

Query:

  1. private Sort sort;
  2. private int skip;
  3. private int limit;
  4.  
  5. public Query skip(int skip) {
  6. this.skip = skip;
  7. return this;
  8. }
  9.  
  10. public Query limit(int limit) {
  11. this.limit = limit;
  12. return this;
  13. }
  14.  
  15. public Query with(Pageable pageable) {
  16.  
  17. if (pageable == null) {
  18. return this;
  19. }
  20.  
  21. this.limit = pageable.getPageSize();
  22. this.skip = pageable.getOffset();
  23.  
  24. return with(pageable.getSort());
  25. }
  26.  
  27. public Query with(Sort sort) {
  28.  
  29. if (sort == null) {
  30. return this;
  31. }
  32.  
  33. for (Order order : sort) {
  34. if (order.isIgnoreCase()) {
  35. throw new IllegalArgumentException(String.format("Gven sort contained an Order for %s with ignore case! "
  36. + "MongoDB does not support sorting ignoreing case currently!", order.getProperty()));
  37. }
  38. }
  39.  
  40. if (this.sort == null) {
  41. this.sort = sort;
  42. } else {
  43. this.sort = this.sort.and(sort);
  44. }
  45.  
  46. return this;
  47. }
  48.  
  49. private final Map<String, CriteriaDefinition> criteria = new LinkedHashMap<String, CriteriaDefinition>();
  50.  
  51. public static Query query(CriteriaDefinition criteriaDefinition) {
  52. return new Query(criteriaDefinition);
  53. }
  54.  
  55. public Query() {}
  56.  
  57. public Query(CriteriaDefinition criteriaDefinition) {
  58. addCriteria(criteriaDefinition);
  59. }
  60.  
  61. public Query addCriteria(CriteriaDefinition criteriaDefinition) {
  62.  
  63. CriteriaDefinition existing = this.criteria.get(criteriaDefinition.getKey());
  64. String key = criteriaDefinition.getKey();
  65.  
  66. if (existing == null) {
  67. this.criteria.put(key, criteriaDefinition);
  68. } else {
  69. throw new InvalidMongoDbApiUsageException("Due to limitations of the com.mongodb.BasicDBObject, "
  70. + "you can't add a second '" + key + "' criteria. " + "Query already contains '"
  71. + existing.getCriteriaObject() + "'.");
  72. }
  73.  
  74. return this;
  75. }

Criteria:

  1. private String key;
  2. private List<Criteria> criteriaChain;
  3. private LinkedHashMap<String, Object> criteria = new LinkedHashMap<String, Object>();
  4. private Object isValue = NOT_SET;
  5.  
  6. public static Criteria where(String key) {
  7. return new Criteria(key);
  8. }
  9.  
  10. /**
  11. * Static factory method to create a Criteria using the provided key
  12. *
  13. * @return
  14. */
  15. public Criteria and(String key) {
  16. return new Criteria(this.criteriaChain, key);
  17. }
  18.  
  19. andOperator
  20.  
  21. is ne lt lte gt gte in nin mod all size exits type not regex

聚合:

  1. /**
  2. * db.videos.aggregate(
  3. [
  4. { $match: { "frags.isnew" : true } },
  5. { $unwind: "$frags" },
  6. { $match: { "frags.isnew" : true } },
  7. { $group: {
  8. _id: {cat1:"$cat1"},
  9. count: { $sum: 1 },
  10. publishdate2: { $max: "$publishdate"}
  11. }
  12. }
  13.  
  14. ]
  15. )
  16. */
  17. Aggregation agg = newAggregation(
  18. project("frags","cat1","publishdate"),//挑选所需的字段
  19. match(
  20. Criteria.where("frags.isnew").is(Boolean.TRUE)
  21. .and("cat1").in(importantCat1List)
  22. ),//筛选符合条件的记录
  23. unwind("frags"),//如果有MASTER-ITEM关系的表,需同时JOIN这两张表的,展开子项LIST,且是内链接,即如果父和子的关联ID没有的就不会输出
  24. match(Criteria.where("frags.isnew").is(Boolean.TRUE)),
  25. group("cat1")//设置分组字段
  26. .count().as("updateCount")//增加COUNT为分组后输出的字段
  27. .last("publishdate").as("publishDate"),//增加publishDate为分组后输出的字段
  28. project("publishDate","cat1","updateCount")//重新挑选字段
  29. .and("cat1").previousOperation()//为前一操作所产生的ID FIELD建立别名
  30. );

————————————————
版权声明:本文为CSDN博主「weihainan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010084868/article/details/52625819

spring data mongo API learn(转)的更多相关文章

  1. MongoDB分组汇总操作,及Spring data mongo的实现

    转载请在页首注明作者与出处 一:分组汇总 1.1:SQL样例 分组汇总的应用场景非常多,比如查询每个班级的总分是多少,如果用关系形数据库,那么sql是这样子的 ),class from score g ...

  2. Spring Data REST API集成Springfox、Swagger

    原文: Documenting a Spring Data REST API with Springfox and Swagger 使用Spring Date REST,你可以迅速为Spring Da ...

  3. mongo学习使用记录2 spring data

    spring data mongo 打印mongo NoSql语句 log4j.properties log4j.rootLogger=INFO, stdout log4j.logger.org.sp ...

  4. 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 ...

  5. Spring Data之Example<>

    简单CRUD之Example动态查询 简单介绍 (部分口水话,部分来自网络,代码永远自产) 使用过Spring全家桶的各位大佬应该都知道,Spring Data这个是Spring对持久层框架的封装,比 ...

  6. 解决neo4j @Transactional 与Spring data jpa @Transactional 冲突问题,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate,以及解决@Version失效问题

    之前mybatis特别流行,所以前几个项目都是用@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider 加反射泛型封装了一些通用 ...

  7. 学习Spring Data JPA

    简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特​​殊 ...

  8. Spring Data Redis入门示例:基于Jedis及底层API (二)

    使用底层API:RedisConnectionFactory和RedisConnection可以直接操作Redis,下面是一个简单的例子: ### Maven依赖 <properties> ...

  9. [Spring Data MongoDB]学习笔记--注册一个Mongo实例

    1. 通过Java based bean metadata @Configuration public class AppConfig { public @Bean Mongo mongo() thr ...

随机推荐

  1. 字符串——AC自动机

    目录 一.前言 二.思路 三.代码 四.参考资料 一.前言 以前一直没学AC自动机,主要是被名字吓到了,自动AC,这么强的名字肯定很难,学了后才发现,其实不难. AC自动机并不是Acept autom ...

  2. Source 介绍

    !!!1.Avro Source 监听AVRO端口来接受来自外部AVRO客户端的事件流. 利用Avro Source可以实现多级流动.扇出流.扇入流等效果. 另外也可以接受通过flume提供的Avro ...

  3. sftp服务器配置

    环境依赖:openssh-server >=4.8 //ssh -V 查看 安装环境: centos6,centos7 1.创建用户组 sftp    groupadd sftp 2.创建登录用 ...

  4. 云数据库 MariaDB 版

    基于MariaDB企业版全球独家合作认证,提供Oracle兼容性及众多企业级数据库特性.支持包括MySQL InnoDB等多种存储引擎,为不同需求的用户提供灵活的选择. 请看视频简介 优势 Oracl ...

  5. 【Vue高级知识】细谈Vue 中三要素(响应式+模板+render函数)

    [Vue高级知识]细谈Vue 中三要素(响应式+模板+render函数):https://blog.csdn.net/m0_37981569/article/details/93304809

  6. 基于VS搭建OpenCV环境

    OpenCV OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行, ...

  7. 福建工程学院第十四届ACM校赛B题题解

    第二集,未来的我发量这么捉急的吗 题意: 有n个数,请问有多少对数字(i,j)(1<=i<j<=n),满足(a[i]^a[j])+((a[i]&a[j])<<1) ...

  8. [Nest] 05.nest之数据库

    数据库 Nest 与数据库无关,允许您轻松地与任何 SQL 或 NoSQL 数据库集成.根据您的偏好,您有许多可用的选项.一般来说,将 Nest 连接到数据库只需为数据库加载一个适当的 Node.js ...

  9. JS图片轮播[左右轮播

    直接可以用,网上摘下来的! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  10. 部署master节点组件

    部署master节点组件 master节点的组件有:kube-apiserver,kube-scheduler,kube-controller-manager 大致安装步骤如下: # mkdir -p ...