Docs Menu
Docs Home
/ / /
Java Reactive Streams 드라이버

데이터베이스 및 컬렉션

이 페이지의 내용

  • 전제 조건
  • MongoDB 배포에 연결하기
  • 데이터베이스에 액세스
  • 컬렉션에 액세스
  • 컬렉션 생성
  • 컬렉션 목록 가져오기
  • 드롭 collection
  • 불변성
  • CodecRegistry

MongoDB는 데이터를 계층적 구조로 구성합니다. MongoDB 배포에는 하나 이상의 데이터베이스가 포함되며, 각 데이터베이스에는 하나 이상의 컬렉션이 포함됩니다. 각 컬렉션에서 MongoDB는 필드-값 쌍을 포함하는 문서로 데이터를 저장합니다.

이 가이드의 코드 예제를 실행하려면 프로그램에 다음 가져오기 문을 포함해야 합니다.

import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoCollection;
import com.mongodb.reactivestreams.client.MongoDatabase;
import static com.mongodb.client.model.Filters.*;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.ValidationOptions;

중요

이 가이드에서는 샘플 사용자 지정 구독자 구현 가이드에 설명된 사용자 지정 Subscriber 구현을 사용합니다.

먼저 실행 중인 MongoDB deployment에 연결합니다.

다음 코드는 포트 27017localhost 에서 실행되는 독립형 MongoDB 배포서버에 연결합니다.

MongoClient mongoClient = MongoClients.create();

MongoDB deployment에 연결하는 방법에 대해 자세히 알아보려면 MongoDB에 연결 튜토리얼을 참조하세요.

MongoClient 인스턴스가 MongoDB 배포에 연결되면 `getDatabase() 메서드를 사용하여 데이터베이스에 액세스합니다.

데이터베이스 이름을 getDatabase() 메서드에 매개 변수로 전달합니다. 데이터베이스가 존재하지 않는 경우, 데이터베이스에 데이터를 삽입할 때 MongoDB가 데이터베이스를 생성합니다.

다음 예제에서는 test 데이터베이스에 액세스합니다.

MongoDatabase database = mongoClient.getDatabase("test");

참고

MongoDatabase 인스턴스는 변경되지 않습니다. 자세히 알아보려면 이 가이드의 불변성 섹션을 참조하세요.

MongoDatabase 인스턴스를 만든 후 getCollection() 메서드를 사용하여 해당 데이터베이스 내에서 컬렉션에 액세스합니다.

컬렉션 이름을 getCollection() 메서드에 매개변수로 전달합니다.

다음 코드는 이전 섹션에서 만든 database 인스턴스를 사용하여 myTestCollection 컬렉션에 액세스합니다.

MongoCollection<Document> coll = database.getCollection("myTestCollection");

참고

MongoCollection 인스턴스는 변경되지 않습니다. 자세한 내용은 이 가이드의 불변성 섹션을 참조하세요.

해당 이름의 컬렉션이 존재하지 않는 경우 해당 컬렉션에 데이터를 처음 삽입할 때 MongoDB가 컬렉션을 생성합니다.

최대 크기를 설정하거나 문서 유효성 검사 규칙을 만드는 등 다양한 옵션을 사용하여 컬렉션을 직접 만들 수도 있습니다.

드라이버는 컬렉션을 직접 만들 수 있는 createCollection() 메서드를 제공합니다. 컬렉션을 만들 때 CreateCollectionOptions 클래스를 사용하여 최대 크기 또는 문서 유효성 검사 규칙과 같은 다양한 컬렉션 옵션을 지정할 수 있습니다.

옵션을 지정하지 않는 경우, 데이터를 처음 삽입할 때 MongoDB가 자동으로 새 컬렉션을 생성하므로 컬렉션을 직접 만들 필요가 없습니다.

다음 작업은 1 메가바이트로 제한된 고정 사이즈 컬렉션을 생성합니다.

database.createCollection(
"cappedCollection",
new CreateCollectionOptions().capped(true).sizeInBytes(0x100000)
).subscribe(new OperationSubscriber<Void>());

고정 사이즈 컬렉션 에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 고정 사이즈 컬렉션을 참조하세요.

MongoDB를 사용하면 업데이트 및 삽입 중에 문서의 유효성을 검사할 수 있습니다. 유효성 검사 규칙은 유효성 검사 규칙 또는 표현식을 지정하는 필터 문서를 사용하는 ValidationOptions 클래스를 사용하여 컬렉션 수준에서 지정됩니다.

다음 예에서는 스키마 유효성 검사를 사용하여 컬렉션을 만듭니다.

ValidationOptions collOptions = new ValidationOptions().validator(
Filters.or(Filters.exists("email"), Filters.exists("phone")));
database.createCollection(
"contacts",
new CreateCollectionOptions().validationOptions(collOptions)
).subscribe(new OperationSubscriber<Void>());

문서 유효성 검사에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 스키마 유효성 검사 를 참조하세요.

MongoDatabase.listCollectionNames() 메서드를 사용하여 데이터베이스의 컬렉션 목록을 가져올 수 있습니다.

database.listCollectionNames().subscribe(new PrintToStringSubscriber<String>());

MongoCollection.drop() 메서드를 사용하여 컬렉션을 삭제하고 컬렉션의 모든 데이터를 삭제할 수 있습니다.

MongoCollection<Document> collection = database.getCollection("contacts");
collection.drop().subscribe(new OperationSubscriber<Void>());

MongoDatabase MongoCollection 인스턴스는 변경할 수 없습니다. 읽기 고려, 읽기 설정쓰기 고려 와 같이 서로 다른 속성을 가진 기존 인스턴스에서 새 인스턴스를 생성하기 위해 MongoDatabaseMongoCollection 클래스는 다음 메서드를 제공합니다.

  • MongoDatabase.withReadConcern()

  • MongoDatabase.withReadPreference()

  • MongoDatabase.withWriteConcern()

  • MongoCollection.withReadConcern()

  • MongoCollection.withReadPreference()

  • MongoCollection.withWriteConcern()

자세한 내용은 MongoDB에서 데이터 읽기 및 MongoDB데이터 쓰기 튜토리얼을 참조하세요.

getCollection() 메서드의 오버로드를 사용하면 BSON 문서를 나타내는 다른 클래스를 지정할 수 있습니다. 예를 들어, CRUD 작업을 수행할 때 문서를 모델링하기 위해 엄격하고 형식이 안전한 BsonDocument 클래스를 사용할 수 있습니다.

// pass BsonDocument.class as the second argument
MongoCollection<BsonDocument> collection = database
.getCollection("mycoll", BsonDocument.class);
// insert a document
BsonDocument document = BsonDocument.parse("{x: 1}");
collection.insertOne(document).subscribe(new OperationSubscriber<Void>());
document.append("x", new BsonInt32(2)).append("y", new BsonInt32(3));
// replace a document
collection.replaceOne(Filters.eq("_id", document.get("_id")), document)
.subscribe(new PrintSubscriber<UpdateResult>("Update Result: %s"));
// find documents
collection.find().subscribe(new PrintDocumentSubscriber());

모든 클래스가 이러한 방식으로 사용하려면 두 가지 요구 사항을 충족해야 합니다.

  • Codec 클래스의 인스턴스는 MongoCollectionCodecRegistry 에 등록되어야 합니다.

  • Codec 인스턴스는 Int32 와 같은 단일 BSON 값뿐만 아니라 전체 BSON 문서를 인코딩 및 디코딩하는 인스턴스여야 합니다.

기본적으로 MongoCollection 는 세 가지 클래스에 대한 Codec 인스턴스로 구성됩니다.

  • Document

  • BsonDocument

  • BasicDBObject

애플리케이션은 CodecRegistry 을(를) 사용자 지정하여 다른 클래스에 대한 Codec 구현을 자유롭게 등록할 수 있습니다. 새 CodecRegistry 인스턴스는 다음 수준에서 구성할 수 있습니다.

  • MongoClientSettings MongoClient 에서

  • withCodecRegistry 메서드 내의 MongoDatabase 에서

  • withCodecRegistry 메서드 내의 MongoCollection 에서

UUID 클래스의 인스턴스를 인코딩 및 디코딩하는 경우를 생각해 보세요. 드라이버는 기본적으로 다른 MongoDB 드라이버와 호환되지 않는 바이트 순서를 사용하여 UUID 인스턴스를 인코딩하며, 기본값을 변경하는 것은 위험할 수 있습니다.

여러 드라이버에 대한 상호 운용성이 필요한 새 애플리케이션은 해당 기본값을 변경할 수 있으며, 다음을 지정하여 이를 수행할 수 있습니다. CodecRegistry

// replaces the default UuidCodec to use the standard UUID representation
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(
CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)
), MongoClientSettings.getDefaultCodecRegistry());
// globally
MongoClientSettings settings = MongoClientSettings.builder()
.codecRegistry(codecRegistry).build();
MongoClient client = MongoClients.create(settings);
// or per database
MongoDatabase database = client.getDatabase("mydb")
.withCodecRegistry(codecRegistry);
// or per collection
MongoCollection<Document> collection = database.getCollection("mycoll")
.withCodecRegistry(codecRegistry);

돌아가기

Stable API