2013-09-08 1 views
4

스프링 데이터 MongoDB를 사용하고 있습니다. 하지만 결과를 도메인 클래스에 매핑하고 싶지는 않습니다. 또한, 나는 몇몇 경우에 저수준 MongoAB API에 액세스하려고합니다. 하지만 봄 연결 풀링 등을 관리하고 싶습니다스프링 데이터 MongoDB와 함께 하위 레벨 드라이버 API를 사용하는 방법

낮은 수준의 작업을 수행하려면 어떻게 com.mongodb.MongoClient의 인스턴스를 얻을 수 있습니다.

MongoClient mongoClient = new MongoClient(); 
DB local = mongoClient.getDB("local"); 
DBCollection oplog = local.getCollection("oplog.$main"); 
DBCursor lastCursor = oplog.find().sort(new BasicDBObject("$natural", -1)).limit(1); 

을 아니면 단순히 JSON 개체/DBCursor/DBOBJECT를 원하는 : 여기 는 내가 뭘하려고 오전입니다.

답변

2

당신이 그것을

MongoDbFactory is an interface provifed by spring-data-mongo that can obtain a   
com.mongodb.DB object and access allthe functionality of a specific MongoDB database 
instance 

구성 파일이 정보가 포함되어야 이런 식으로

@Autowired MongoDbFactory factory; 
DB local = factory.getDB("local"); 
DBCollection oplog = local.getCollection("oplog.$main"); 
DBCursor lastCursor = oplog.find().sort(new BasicDBObject("$natural", -1)).limit(1); 

수행 할 수 있습니다

<bean id="mongoFactoryBean" 
class="org.springframework.data.mongodb.core.MongoFactoryBean"> 
    <property name="host" value="127.0.0.1"/> 
    <property name="port" value="27017"/> 
</bean> 

<bean id="mongoDbFactory" 
class="org.springframework.data.mongodb.core.SimpleMongoDbFactory"> 
    <constructor-arg name="mongo" ref="mongoFactoryBean"/> 
    <constructor-arg name="databaseName" value="local"/> 
</bean> 

그렇게 그 일을, 봄은 관리 유지한다 당신의 연결 풀.

2

일반적으로 MongoTemplateexecute(…) 메쏘드를 통해 낮은 수준의 액세스를 수행하여 콜백을 받아 네이티브 Mongo 드라이버 API에 액세스 할 수있게합니다.

class MyClient { 

    private final MongoOperations operations; 

    @Autowired 
    public MyClient(MongoOperations mongoOperations) { 
    this.operations = operations; 
    } 

    void yourMethod() { 

    operations.execute(new CollectionCallback<YourDomainClass>() { 
     YourDomainClass doInCollection(DBCollection collection) { 
     // here goes your low-level code 
     } 
    }); 
    } 

이 템플릿 방식의 장점은 MongoOperations 인터페이스를 백업 MongoTemplate 인스턴스가 여전히 자원 관리 및 (봄의 DataAccessException 계층 구조에 모든 몽고 특정 예외를 변환) 예외 번역을 돌볼 것입니다.

그러나, 당신의 구체적인 예를 들어, 당신은 그냥 가서 할 수있는 직접 다음 여기에

Query query = new Query().with(new Sort(DESC, "$natural")).limit(1); 
DBObject result = operations.find(query, DBObject.class, "oplog.$main"); 

당신은 혼합 템플릿으로 결과를 변환 할 수 있도록 당신이 find(…) 방법으로 전달하는 형식을 일치시킬 수 있습니다 Map 또는 필요한 경우 도메인 개체. 위에 표시된대로 위의 샘플 코드가 누락 된 리소스 관리 및 예외 변환도 제공됩니다.