1. TIL
A. Update, Delete
1. Update
@RequestMapping(value = "/update/rating", method = RequestMethod.GET)
public String updateRating() {
Query query = new Query();
Criteria criteria = Criteria.where("_id").is(14);
query.addCriteria(criteria);
Update update = Update.update("rating", 8);
mongoTemplate.updateMulti(query, update, Rating.class);
return "home";
}
2. Delete
@RequestMapping(value = "/delete/rating", method = RequestMethod.GET)
public String deleteRating() {
Query query = new Query();
Criteria criteria = Criteria.where("_id").is(11);
query.addCriteria(criteria);
Query query = new Query();
Criteria criteria = new Criteria();
criteria.orOperator(
Criteria.where("_id").is(12),
Criteria.where("_id").is(13)
);
query.addCriteria(criteria);
mongoTemplate.remove(query, Rating.class);
return "home";
}
B. 기본 문법
1. count
@RequestMapping(value = "/count", method = RequestMethod.GET)
public String findRating() {
long count = mongoTemplate.count(new Query(), Rating.class);
System.out.println(count);
return "home";
}
2. limit
@RequestMapping(value = "/find/rating/limit", method = RequestMethod.GET)
public String limit() {
List<Rating> ratingLimitList = mongoTemplate.find(new Query().limit(3), Rating.class);
ratingLimitList.forEach((rating) -> {System.out.println(rating);});
return "home";
}
3. distinct()
@RequestMapping(value = "/find/rating/distinct", method = RequestMethod.GET)
public String distinct() {
List<Double> ratingDistinctList = mongoTemplate.findDistinct("rating", Rating.class, Double.class);
ratingDistinctList.forEach(rating -> System.out.println(rating));
return "home";
}
4. sort()
@RequestMapping(value = "/find/rating/sort", method = RequestMethod.GET)
public String sort() {
List<Rating> ratingSortedList = mongoTemplate.find(new Query()
.with(Sort.by(Sort.Direction.ASC, "user_id")), Rating.class);
ratingSortedList.forEach(rating -> System.out.println(rating));
return "home";
}
5. regex + projection
@RequestMapping(value = "/find/orders/regex", method = RequestMethod.GET)
public String regex() {
Query regexQuery = new Query();
Criteria regexCriteria = Criteria.where("order_user").regex("^m");
regexQuery.fields().exclude("_id");
regexQuery.addCriteria(regexCriteria);
List<Orders> regexList = mongoTemplate.find(regexQuery, Orders.class);
regexList.forEach(orders -> System.out.println(orders));
List<Document> regexDocumentList = mongoTemplate.find(regexQuery, Document.class, "orders");
regexDocumentList.forEach((document) -> {System.out.println(document);});
return "home";
}
6. Pagenation
@RequestMapping(value = "/find/zip/pagenation", method = RequestMethod.GET)
public String pagenation() {
Query pagenationQuery = new Query();
pagenationQuery.with(PageRequest.of(0, 10));
List<Document> zipList = mongoTemplate.find(pagenationQuery, Document.class, "zip");
zipList.forEach(data -> System.out.println(data));
return "home";
}
C. Aggregate
1. Aggregate : $project + $limit
@RequestMapping(value = "/aggregate", method = RequestMethod.GET)
public String aggregate() {
ProjectionOperation project = Aggregation.project("rating");
LimitOperation limit = Aggregation.limit(3);
Aggregation aggregation = Aggregation.newAggregation(project, limit);
AggregationResults<Document> projectList = mongoTemplate.aggregate(aggregation,"rating", Document.class);
projectList.forEach(document -> System.out.println(document));
return "home";
}
2. Aggregate : $match
@RequestMapping(value = "/aggregate/match", method = RequestMethod.GET)
public String match() {
MatchOperation match = Aggregation.match(
Criteria.where("rating").is(3)
);
Aggregation aggregation = Aggregation.newAggregation(match);
AggregationResults<Document> projectList = mongoTemplate.aggregate(aggregation,"rating", Document.class);
projectList.forEach(document -> System.out.println(document));
return "home";
}
3. Aggregate : $group + $sort
@RequestMapping(value = "/aggregate/group", method = RequestMethod.GET)
public String group() {
GroupOperation group = Aggregation.group("rating");
SortOperation sort = Aggregation.sort(Sort.Direction.ASC, "_id");
Aggregation aggregation = Aggregation.newAggregation(group, sort);
AggregationResults<Document> projectList = mongoTemplate.aggregate(aggregation,"rating", Document.class);
projectList.forEach(document -> System.out.println(document));
return "home";
}
4. Aggregate : $group + count()
@RequestMapping(value = "/aggregate/group2", method = RequestMethod.GET)
public String group2() {
GroupOperation group = Aggregation.group("rating").count().as("count");
Aggregation aggregation = Aggregation.newAggregation(group);
AggregationResults<Document> projectList = mongoTemplate.aggregate(aggregation,"rating", Document.class);
projectList.forEach(document -> System.out.println(document));
return "home";
}
5. Aggregate : $unwind
@RequestMapping(value = "/aggregate/unwind", method = RequestMethod.GET)
public String unwind() {
UnwindOperation unwind = Aggregation.unwind("sizes");
Aggregation aggregation = Aggregation.newAggregation(unwind);
AggregationResults<Document> projectList = mongoTemplate.aggregate(aggregation,"items", Document.class);
projectList.forEach(document -> System.out.println(document));
return "home";
}
6. Aggregate : $addFields
@RequestMapping(value = "/aggregate/addFields", method = RequestMethod.GET)
public String addFields() {
AggregationExpression homeworkSumExpression = ArithmeticOperators.valueOf("homework").sum();
AddFieldsOperation addFields = Aggregation.addFields()
.addField("totalHomework")
.withValue(homeworkSumExpression)
.build();
Aggregation aggregation = Aggregation.newAggregation(addFields);
AggregationResults<Document> projectList = mongoTemplate.aggregate(aggregation,"scores", Document.class);
projectList.forEach(document -> System.out.println(document));
return "home";
}
7. $lookup
@RequestMapping(value = "/aggregate/lookup", method = RequestMethod.GET)
public String lookup() {
LookupOperation lookup = Aggregation.lookup("products", "product_id", "product_id", "order_product");
Aggregation aggregation = Aggregation.newAggregation(lookup);
AggregationResults<Document> projectList = mongoTemplate.aggregate(aggregation,"orders", Document.class);
projectList.forEach(document -> System.out.println(document));
return "home";
}