当前位置:   article > 正文

springboot + mongdb 基本操作_lookupoperation 选择字段

lookupoperation 选择字段

1、引入 mongdb 依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  4. </dependency>

2、配置mongdb链接

  1. server:
  2. port: 10000
  3. # mongdb
  4. spring:
  5. data:
  6. mongodb:
  7. #认证的库
  8. # authentication-database: admin
  9. #操作的库
  10. database: kou
  11. # username: user
  12. # password: 123456
  13. host: localhost
  14. port: 27017

3、 创建实体

  1. package com.kou.test.entity;
  2. import lombok.Data;
  3. import org.springframework.data.annotation.Id;
  4. import org.springframework.data.mongodb.core.mapping.Document;
  5. import java.util.Date;
  6. @Data
  7. @Document(collection = "user")
  8. public class User {
  9. @Id
  10. private Long userId;
  11. private String userName;
  12. private String nickName;
  13. private Integer age;
  14. private Date createTime;
  15. }
  16. package com.kou.test.entity;
  17. import lombok.Data;
  18. import org.springframework.data.mongodb.core.mapping.Document;
  19. import java.io.Serializable;
  20. import java.util.Date;
  21. @Data
  22. @Document(collection = "score")
  23. public class Score implements Serializable {
  24. private String id;
  25. private Long userId;
  26. private Integer score;
  27. private Date createTime;
  28. private Date updateTime;
  29. }

4、执行CRUD

  1. package com.kou.test.service.impl;
  2. import com.kou.test.entity.User;
  3. import com.kou.test.service.IUserService;
  4. import com.mongodb.client.result.DeleteResult;
  5. import com.mongodb.client.result.UpdateResult;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.data.mongodb.core.MongoTemplate;
  9. import org.springframework.data.mongodb.core.aggregation.*;
  10. import org.springframework.data.mongodb.core.query.Criteria;
  11. import org.springframework.data.mongodb.core.query.Query;
  12. import org.springframework.data.mongodb.core.query.Update;
  13. import org.springframework.stereotype.Service;
  14. import java.util.Collections;
  15. import java.util.Date;
  16. import java.util.List;
  17. import java.util.Map;
  18. @Service
  19. public class UserServiceImpl implements IUserService {
  20. @Autowired
  21. private MongoTemplate mongoTemplate;
  22. @Override
  23. public User add(User user) {
  24. user.setCreateTime(new Date());
  25. return mongoTemplate.insert(user);
  26. }
  27. @Override
  28. public int update(User user) {
  29. Query query = new Query(Criteria.where("userId").is(user.getUserId()));
  30. Update update = new Update();
  31. if (StringUtils.isNotBlank(user.getNickName())) {
  32. update.set("nickName", user.getNickName());
  33. }
  34. if (null != user.getAge()) {
  35. update.set("age", user.getAge());
  36. }
  37. UpdateResult result = mongoTemplate.updateFirst(query, update, User.class);
  38. return 1;
  39. }
  40. @Override
  41. public User query(Long userId) {
  42. Query query = new Query();
  43. query.addCriteria(Criteria.where("userId").is(userId));
  44. return mongoTemplate.findOne(query, User.class);
  45. }
  46. @Override
  47. public List<User> list() {
  48. return mongoTemplate.findAll(User.class);
  49. }
  50. @Override
  51. public int delete(Long userId) {
  52. Query query = new Query();
  53. query.addCriteria(Criteria.where("userId").is(userId));
  54. DeleteResult result = mongoTemplate.remove(query, User.class);
  55. return 0;
  56. }
  57. /**
  58. * 分页查询
  59. *
  60. * @param page
  61. * @param pageSize
  62. * @param nickName
  63. * @return
  64. */
  65. @Override
  66. public List<User> page(Integer page, Integer pageSize, String nickName) {
  67. Query query = new Query();
  68. // 分页
  69. query.limit(pageSize);
  70. query.skip((page - 1) * pageSize);
  71. List<User> userList = mongoTemplate.find(query, User.class);
  72. return userList;
  73. }
  74. /**
  75. * 通过id查询
  76. *
  77. * @param userId
  78. * @return
  79. */
  80. @Override
  81. public Map info(Long userId) {
  82. LookupOperation lookupOperation = LookupOperation.newLookup()
  83. //从表名
  84. .from("score")
  85. //主表关联字段
  86. .localField("_id")
  87. //从表关联字段
  88. .foreignField("userId")
  89. //查询结果名
  90. .as("userInfo");
  91. // 查询主表
  92. Criteria criteriaMain = Criteria.where("_id").is(userId);
  93. AggregationOperation matchMain = Aggregation.match(criteriaMain);
  94. // 选择需要的字段
  95. ProjectionOperation project = Aggregation.project("_id", "userName", "userInfo.id", "userInfo.score");
  96. // Aggregation.unwind() 将字迹数组转为单一对象
  97. Aggregation aggregation = Aggregation.newAggregation(lookupOperation, matchMain, Aggregation.unwind("userInfo"));
  98. List<Map> result = mongoTemplate.aggregate(aggregation, "user", Map.class).getMappedResults();
  99. if (null != result && result.size() > 0) {
  100. return result.get(0);
  101. }
  102. return Collections.EMPTY_MAP;
  103. }
  104. /**
  105. * 条件查询
  106. *
  107. * @param score 积分
  108. * @param age 年龄
  109. * @return 结果
  110. */
  111. @Override
  112. public List<Map> queryList(Integer score, Integer age) {
  113. LookupOperation lookupOperation = LookupOperation.newLookup()
  114. .from("score")
  115. .localField("_id")
  116. .foreignField("userId")
  117. .as("score");
  118. // 添加查询条件
  119. Criteria criteria = new Criteria();
  120. if (null != score) {
  121. criteria.and("score.score").gte(score);
  122. }
  123. if (null != age) {
  124. criteria.and("age").gte(age);
  125. }
  126. MatchOperation match = Aggregation.match(criteria);
  127. Aggregation aggregation = Aggregation.newAggregation(lookupOperation, match, Aggregation.unwind("score"));
  128. return mongoTemplate.aggregate(aggregation, "user", Map.class).getMappedResults();
  129. }
  130. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号