NoSQL/MongoDB

[spring-data/mongodb] 클라이언트 콘솔에서 DBRef로 등록된 객체를 통해 find()하는 방법.

jeeyong 2011. 12. 26. 13:25
DBRef로 참조된 객체는 

 "owner" : { "$ref" : "users", "$id" : ObjectId("4edefb3dfa30c0d0702f2d83") }

처럼  document에 참조가 된다.
일반적으로 그냥 ID값만 string값으로 저장도 가능하지만 DBRef를 사용하면 Spring-data 라이브러리에서 mongodb 드라이브를 통해 굳이 명시하지 않아도 자동으로 객체를 가져오는 기능이 있어 편리하다..

서론은 이쯤하고 개발을 하게 되면 실제로 데이터가 어떻게 들어갔는지도 알고싶고 클라이언트 콘솔에서 직접 find()를 날려봐야할 경우가 생긴다. 이때 개발에서와는 다른 문법을 사용하게 되어 기록한다.

자바 드라이버를 이용한 쿼리에선
where("owner.$id").is(new ObjectId( ID키값 ))
이런 방법으로 쿼리를 날릴경우   Query.getQueryObject().toString() 를 통해 아래와 같이 생성되는것을 볼수있으나

> db.post.find(  { "owner.$id" : { "$oid" : "4edefb3dfa30c0d0702f2d83"}} )

사실 저 조건으로 콘솔에 날려도 데이터를 가져오지 못한다.

콘솔에서 저런 조건을 만족하려면

> db.post.find({  "owner" : { "$ref" : "users", "$id" : ObjectId("4edefb3dfa30c0d0702f2d83") }})

위와 같이 $ref값에 해당 객체 정보를 넣어야 하고 $id연산자에 ObjectId를 이용해서 검색해줘야 같은 결과값을 가져올 수 있다.

 

'NoSQL > MongoDB' 카테고리의 다른 글

insert와 save의 차이(?) 오류(?) 버그(?)  (0) 2012.06.13
Mongdb DB 보안셋팅  (0) 2012.05.14
MongoDB SpringFramework 인젝션 방법  (0) 2011.11.21