반응형
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
application.properties
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=admin
spring.data.mongodb.username=root
spring.data.mongodb.password=123456
# 위 설정과 동일
# spring.data.mongodb.uri=mongodb://root:123456@localhost:27017/admin
MongoDBConfig
- 데이터 저장시 "_class" 필드가 자동 추가되는 현상 방지를 위한 설정
@Configuration
public class MongoDBConfig {
@Bean
public MappingMongoConverter mappingMongoConverter(
MongoDatabaseFactory mongoDatabaseFactory,
MongoMappingContext mongoMappingContext
) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory);
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}
}
User
// collections 이름 : users
@Document(collection = "users")
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
@Id
private String id;
private String name;
private String email;
private String password;
}
mongoTemplate 사용
@Autowired
private MongoTemplate mongoTemplate;
추가
mongoTemplate.save(new User(null, "john", "john@example.com", "john-1234"));
mongoTemplate.insert(new User(null, "tom", "tom@example.com", "tom-1234"));
수정
// 수정과 동시에 조회
User user = mongoTemplate.findAndModify(
Query.query(Criteria.where("name").is("john")),
Update.update("password", "john-4567"),
User.class
);
// 단일 데이터 수정
UpdateResult result = mongoTemplate.updateFirst(
Query.query(Criteria.where("name").is("john")),
Update.update("password", "john-4567"),
User.class
);
// 복수 데이터 수정
UpdateResult result = mongoTemplate.updateMulti(
Query.query(Criteria.where("name").is("john")),
Update.update("password", "john-4567"),
User.class
);
삭제
DeleteResult result = mongoTemplate.remove(
Query.query(Criteria.where("name").is("john")),
User.class
);
조회
// 전체 조회
List<User> users = mongoTemplate.findAll(User.class);
// 목록 조회
List<User> users = mongoTemplate.find(
Query.query(Criteria.where("name").is("john")),
User.class
);
// 단건 조회
User user = mongoTemplate.findOne(
Query.query(Criteria.where("name").is("john")),
User.class
);
// count 조회
long count = mongoTemplate.count(new Query(), User.class);
// distinct 조회
List<String> names = mongoTemplate.findDistinct("name", User.class, String.class);
// pagination : 1페이지 10개 데이터 조회
List<User> users = mongoTemplate.find(new Query().with(PageRequest.of(0, 10)), User.class);
// 정렬 결과 조회
List<User> users = mongoTemplate.find(new Query().with(Sort.by(Sort.Direction.DESC, "age")), User.class);
// or 조건 조회
List<User> users = mongoTemplate.find(
Query.query(
Criteria.where("name").is("john")
.and("password").is("0000")
.orOperator(
Criteria.where("email").regex("naver.com"),
Criteria.where("email").regex("google.com")
)
),
User.class
);
// 특정 필드 exclude 조회
Query query = new Query();
query.fields().exclude("_id");
List<Document> users = mongoTemplate.find(query, Document.class, "users");
참고
반응형
'Development > MongoDB' 카테고리의 다른 글
[MongoDB] NodeJS 연동 (0) | 2020.12.29 |
---|---|
[MongoDB] 데이터 백업/복구 (0) | 2020.12.29 |
[MongoDB] Replica Set 구성하기 (0) | 2020.12.29 |
[MongoDB] Query (0) | 2020.12.29 |
[MongoDB] 설치하기 (0) | 2020.12.29 |