개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.28 23:18

MongoDBDriverManager::executeQuery 관련 질문

목록
  • 반응형디자인매니아 1일 전 2025.06.28 23:18
  • 13
    1
제가 MongoDBDriverManager::executeQuery를 사용하여 쿼리를 실행할 때 발생하는 오류에 대해 도움을 부탁드립니다.

제가 사용하고 있는 코드는 다음과 같습니다.
java

MongoDBDriverManager mongoDBDriverManager = MongoDBDriverManager.create();

MongoDatabase mongoDatabase = mongoDBDriverManager.getDatabase("myDatabase");

MongoCollection mongoCollection = mongoDatabase.getCollection("myCollection");



MongoQueryOptions queryOptions = new MongoQueryOptions();

queryOptions.setMaxTime(Duration.ofMillis(1000));



FindIterable findIterable = mongoCollection.find(queryOptions);



이 코드를 실행할 때 발생하는 오류는 다음과 같습니다.


Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 1000 ms while waiting for a server that matches any of the read preference servers



오류를 해결할 수 있는 방법을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    오류가 발생하는 이유는 MongoDBDriverManager::executeQuery 메서드가 기본적으로 read preference를 사용하지 않기 때문입니다. read preference를 설정하지 않으면 MongoDB 서버가 선택되지 않아 오류가 발생합니다.

    read preference를 설정하여 오류를 해결할 수 있습니다. 예를 들어, read preference를 PRIMARY로 설정하여 오류를 해결할 수 있습니다.

    #hostingforum.kr
    java
    
    MongoClientSettings settings = MongoClientSettings.builder()
    
        .applyConnectionString(MongoClientURI.fromConnectionString("mongodb://localhost:27017/"))
    
        .build();
    
    
    
    MongoClient mongoClient = MongoClients.create(settings);
    
    
    
    MongoDatabase mongoDatabase = mongoClient.getDatabase("myDatabase");
    
    MongoCollection mongoCollection = mongoDatabase.getCollection("myCollection");
    
    
    
    MongoQueryOptions queryOptions = new MongoQueryOptions();
    
    queryOptions.setMaxTime(Duration.ofMillis(1000));
    
    queryOptions.readPreference(MongoReadPreference.primary());
    
    
    
    FindIterable findIterable = mongoCollection.find(queryOptions);
    
    


    또는 MongoDBDriverManager::executeQuery 메서드에 read preference를 직접 전달할 수 있습니다.

    #hostingforum.kr
    java
    
    MongoDBDriverManager mongoDBDriverManager = MongoDBDriverManager.create();
    
    MongoDatabase mongoDatabase = mongoDBDriverManager.getDatabase("myDatabase");
    
    MongoCollection mongoCollection = mongoDatabase.getCollection("myCollection");
    
    
    
    MongoQueryOptions queryOptions = new MongoQueryOptions();
    
    queryOptions.setMaxTime(Duration.ofMillis(1000));
    
    queryOptions.readPreference(MongoReadPreference.primary());
    
    
    
    FindIterable findIterable = mongoCollection.find(queryOptions);
    
    

    2025-06-28 23:19

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 31,996건 / 10 페이지

검색

게시물 검색