1.
MVC Pattern + MongoDB를 해볼 예정
2. 오늘 enum이라는 걸 배워봤다.
ex) 요일 (7), day (1~31) 등을 관리할 때 사용한다.
변수는 하나인데 값이 여러개 있을 때!!!!
3. Beans 설정
4. MongoDB는 AutoCommit이라 Commit, Rollback이 없다.
5.
DAOBOOK 패키지의 NewMyDAO클래스를 다음과 같이 작성해준다.
6. 메인설정을 해준 뒤 실행해주면
이렇게 MongoDB에 Input이 되었음을 알 수 있다.
cf. 여기서 실수할 수 있는 부분
왜 그런지 살펴보자.
context:annotation-config는 @Required와 @AutoWired를 읽어들이는 기능을 한다.
반면 Componenet-Scan은 @Componenet, @Repository, @Service, @Controller, ....등등을 읽어들인다.
그러므로 각각의 기능이 다른 context이며 하나의 안으로 넣을 수가 없다.
7. Spring에서 Map-Reduce Operation 연습해보기
https://docs.spring.io/spring-data/mongodb/docs/2.1.6.RELEASE/reference/html/#mongo.mapreduce
다음의 API문서를 토대로 진행한다.
API문서에서는 jmr1이라는 컬렉션으로 했지만,
우리 반의 실습에서는 mrtest라고 해야한다. (여기서 insert할 때 주의해야 한다. 이 점은 뒤에서 언급하겠다)
다음과 같이 복붙하고 map.js를 입력해준다.
다음과 같이 복붙하고 reduce.js를 입력해준다.
메인에서 test()라는 메소드를 만들어준뒤
ValueObject 클래스에는 다음과 같이 입력해준다.
그런데
Exception in thread "main" com.mongodb.CommandFailureException:
{ "serverUsed" : "localhost:27017" , "ok" : 0.0 , "errmsg" : "namespace does not exist: test.mrtest" , "code" : 26 , "codeName" : "NamespaceNotFound"}
at com.mongodb.CommandResult.getException(CommandResult.java:76)
at com.mongodb.CommandResult.throwOnError(CommandResult.java:140)
at com.mongodb.DBCollection.mapReduce(DBCollection.java:1727)
at org.springframework.data.mongodb.core.MongoTemplate.mapReduce(MongoTemplate.java:1409)
at org.springframework.data.mongodb.core.MongoTemplate.mapReduce(MongoTemplate.java:1381)
at com.DAOBOOK.NewMyDAO.test(NewMyDAO.java:97)
at com.VIEW.App.main(App.java:25)
이런 에러가 발생했다. 이유는 단순했다.
데이터를 입력할 때 나는
use mrtest를 한 뒤에 입력을 했다.
그렇기 때문에 mrtest로 들어갔다.
이게 무슨 문제냐고???
spring-config.xml에서는 test라고 databaseName을 설정해주고서 자기 마음대로 mrtest를 설정했으니 에러가 나는것이다.
두가지 해결방법이 있다.
ⓐ constructor-arg name = "databaseName"의 value를 mrtest라고 변경시키고 다시 뒤엎기
cf.
이렇게 하면 기존의 NewMyDAO의 update()메소드에서 NullPointerException이 발생한다.
ⓑ MongoDB에서 use test를 한 뒤 거기에 데이터를 입력하여 새로 하는 방법이다.
use test를 한 뒤
mrtest에 데이터를 입력해준다.
그렇게 하면 결과가 다음과 같이 출력된다.
API문서가 원하는 것과 똑같다.
8.
10.11.2를 들어간다.
연산자에 대해서 다시한번 정리!
9.
이렇게 한 뒤
ⓐ location.txt로 저장한다.
mongoexport --db myloc -c location --out location.txt
ⓑ location.json로 저장한다.
mongoexport --db myloc -c location --out location.json
ⓒ location.txt를 읽어와서 좌표 내용을 출력한다.
mongoimport --db myloc -c location --file location.txt
ⓓ $near 0.75 max까지 추출한다.
db.location.createIndex({position:"2d"});
-> 선생님은 ensureIndex를 사용하셨지만, MongoDB in Action이라는 책을 보니 v3.0부터 createIndex를 쓴다고 나와있었다.
별 차이는 없을거 같은데 그래도...
db.location.find({position : {$near : [0, 0], $maxDistance : 0.75} })
이렇게 하면
'국비교육' 카테고리의 다른 글
Python 1일차 (0) | 2019.04.24 |
---|---|
MongoDB 7일차 (0) | 2019.04.23 |
MongoDB 5일차 (0) | 2019.04.19 |
MongoDB 수업 4일차 (0) | 2019.04.18 |
MongoDB 수업 3일차 (0) | 2019.04.17 |
댓글