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()

자세히 알아보려면 읽기 작업쓰기 작업 튜토리얼을 참조하세요.

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);

돌아가기

압축