2013-03-04 5 views
1

다음 프로그램에서 getDatabaseNames()은 값 목록을 반환하고 getCollectionNames()은 값 집합을 반환합니다. 둘 다 Set을 반환하지 않는 이유는 무엇입니까?getDatabaseNames()는 List를 반환하고 getCollectionNames()는 mongo DB에서 집합을 반환합니다.

동일한 이름의 데이터베이스를 만들 수 있다는 의미입니까?

package demo; 

import java.util.List; 
import java.util.Set; 

import com.mongodb.DB; 
import com.mongodb.MongoClient; 

public class Collections2 { 

public static void main(String[] args) { 
    MongoClient client=null; 
    try { 
     client=new MongoClient(); 

     //Lists all the database names 
     System.out.println("List of databases "); 
     List<String> DBset=client.getDatabaseNames(); 
     for(String string:DBset){ 
       System.out.println(string); 
     } 

     //list all the collection names in school DB 
     DB db=client.getDB("school"); 
     System.out.println("List of collections in school DB"); 
     Set<String> set=db.getCollectionNames(); 
     for (String string:set) { 
      System.out.println(string); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}  

답변

0

그러나 이상하게 들릴 수도 있지만 예!

이것은 Java에 국한되지 않습니다. this related question 상태로이 동작을 명령 줄 도구 mongo으로 복제 할 수 있습니다. 질문에서

인용구 :

여기

가 발생하는 방법입니다

  1. 는 이미 이름이 "TEST1"문서 만 저장하는 컬렉션으로, 데이터베이스를 가지고있다.
  2. 그렇다면 GridFS를 사용하여 이진 파일을 포함하는 파일을 저장합니다 (사실이 원인 일 수는 있지만 이유는 없습니다)
  3. 이제 문제가 발생합니다. use test1과 같은 명령을 사용하여 "test1"에 액세스하려고 시도합니다. "test1"과 같은 이름의 빈 데이터베이스가 작성됩니다. 무엇을 보여 DBS처럼

을 보여줍니다 :

test1 empty 
test1 0.0625GB 

이 처리하는 방법에 관해서는 자바 드라이버가 현재의로 데시벨을 (얻기위한 경우에만이 방법을 가지고 있기 때문에, 나는 확실하지 않다 안정, 2.10.1) :

DB 인스턴스를 반환하는 다른 함수 getUsedDatabases()는이 실행에서 MongoDB 드라이버의이 인스턴스에서 사용 된 DB 객체 만 반환합니다.

이것은 동일한 런타임에서 이 "기능"(?)을 사용하고 동일한 이름의 두 DB를 처리하지만 이는 정리하기에 추악한 상황이 될 수 있음을 의미합니다 뭔가 엉망이되고, JVM이 엉망진창을 정리하기 전에 종료 된 경우 ... (이론적으로, 지금 당장이를 확인할 수 없기 때문에 ... 내가 개발 한 Mongo 인스턴스 근처에있을 때 내 조사 결과를보고 할 것입니다.)