spring boot(1.3.0)를 이용해서 mongodb(mongo 3.0.6)를 사용하고 있다.
mongo 터미널을 이용해서 mongodb에서 색인 추가/삭제하는 법을 알고, jpa 연동시 주의사항을 본다.
1. mongodb에서 색인 추가/삭제하기
* 참고 자료 : http://docs.mongodb.org/manual/core/index-creation/
customer 콜렉션에 색인 추가하기
replset:PRIMARY> use test
switched to db test
replset:PRIMARY> db.customer.save({id:1, firstName:'samuel', lastName:'kim'})
WriteResult({ "nInserted" : 1 })
replset:PRIMARY> db.customer.save({id:2, firstName:'daniel', lastName:'park'})
WriteResult({ "nInserted" : 1 })
replset:PRIMARY> db.customer.ensureIndex({firstName:1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
replset:PRIMARY> db.customer.indexes.find()
replset:PRIMARY> db.customer.find()
{ "_id" : ObjectId("5601058d3004b0f26a3fd806"), "_class" : "com.kakao.story.gateway.model.Customer", "firstName" : "Alice", "lastName" : "Smith" }
{ "_id" : ObjectId("5601058d3004b0f26a3fd807"), "_class" : "com.kakao.story.gateway.model.Customer", "firstName" : "Bob", "lastName" : "Smith" }
{ "_id" : ObjectId("561635bdc95ab6bd4d165508"), "id" : 1, "firstName" : "samuel", "lastName" : "kim" }
{ "_id" : ObjectId("561635d3c95ab6bd4d165509"), "id" : 2, "firstName" : "daniel", "lastName" : "park" }
replset:PRIMARY> db.customer.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.customer"
},
{
"v" : 1,
"key" : {
"firstName" : 1
},
"name" : "firstName_1",
"ns" : "test.customer"
}
]
customer 콜렉션에 추가했던 색인을 삭제한다.
replset:PRIMARY> db.customer.dropIndex({'firstName':1})
{ "nIndexesWas" : 2, "ok" : 1 }
replset:PRIMARY> db.customer.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.customer"
}
]
2. jpa 모델 연동 사항
Customer라는 클래스를 저장 모델로 하여 JPA로 사용하고 있다고 가정한다.
Customer 클래스에 id를 주어 간단하게 모델로 저장할 때는 아래와 같이 사용할 수 있다.
public class Customer {
@Id
private String id;
private String firstName;
private String lastName; //... }
import org.springframework.data.mongodb.core.index.Indexed;public class Customer {
@Id
private String id;
@Indexed
private String firstName;
private String lastName; //... }
@Indexed의 정상 동작을 하도록 하려면, 클래스 앞에 반드시 @Document를 추가해야 한다. 그리고 mongo 터미널에서 확인하면 정상적으로 동작하는지 확인할 수 있다.
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;@Document
public class Customer {
@Id
private String id;
@Indexed
private String firstName;
private String lastName; //... }
replset:PRIMARY> db.customer.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "staticmap.customer"
},
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "Customer_TextIndex",
"ns" : "staticmap.customer",
"weights" : {
"firstName" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 2
}
]
'general java' 카테고리의 다른 글
[spring boot] undertow (0) | 2015.10.30 |
---|---|
Java8 - parallelStream() cpu 개수 (0) | 2015.10.13 |
[spring boot] l7check 막코드 + nginx 설정 (0) | 2015.10.05 |
[spring retry] 재시도 하기 (0) | 2015.10.05 |
[spring] p와 c 노테이션으로 spring rest template을 간결하게 사용하기 (0) | 2015.10.05 |