반응형

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

+ Recent posts