변경 스트림
MongoDB 3.6 은 $changeStream
집계 파이프라인 연산자를 도입합니다.
변경 스트림을 사용하면 컬렉션의 문서에 대한 변경 사항을 관찰할 수 있습니다. 이 새 단계의 유용성을 개선하기 위해 MongoCollection
유형에는 새로운 watch()
메서드가 포함되어 있습니다. ChangeStreamPublisher
인스턴스는 변경 스트림을 설정하고 잠재적으로 복구 가능한 오류가 발생하면 자동으로 재개를 시도합니다.
전제 조건
이 가이드의 코드 예제를 실행하려면 다음 구성 요소를 설정해야 합니다.
test.restaurants
문서restaurants.json
자산 GitHub 에 있는 파일의 문서로 채워진 컬렉션입니다.다음 가져오기 문:
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 com.mongodb.client.model.Aggregates; import com.mongodb.client.model.Filters; import com.mongodb.client.model.changestream.FullDocument; import com.mongodb.client.model.changestream.ChangeStreamDocument; import org.bson.Document;
중요
이 가이드에서는 퀵 스타트 프라이머에 설명된 Subscriber
구현을 사용합니다.
MongoDB 배포에 연결하기
먼저 MongoDB deployment에 연결한 다음 MongoDatabase
및 MongoCollection
인스턴스를 선언하고 정의합니다.
다음 코드는 포트 27017
의 localhost
에서 실행되는 독립형 MongoDB 배포서버에 연결합니다. 그런 다음 test
데이터베이스를 참조하는 database
변수와 restaurants
컬렉션을 참조하는 collection
변수를 정의합니다.
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
MongoDB deployment에 연결하는 방법에 대해 자세히 알아보려면 MongoDB에 연결 튜토리얼을 참조하세요.
컬렉션 변경 사항 보기
변경 스트림을 만들려면 MongoCollection.watch()
메서드 중 하나를 사용합니다.
다음 예제에서 change stream은 관찰한 모든 변경 사항을 출력합니다.
collection.watch().subscribe(new PrintDocumentSubscriber());
데이터베이스의 변경 사항 확인
애플리케이션은 단일 change stream을 열어 데이터베이스의 모든 비시스템 collection을 감시할 수 있습니다. 이러한 change stream을 만들려면 MongoDatabase.watch()
메서드 중 하나를 사용합니다.
다음 예제에서 변경 스트림은 지정된 데이터베이스에서 관찰되는 모든 변경 사항을 출력합니다.
database.watch().subscribe(new PrintDocumentSubscriber());
모든 데이터베이스의 변경 사항 확인
애플리케이션은 단일 변경 스트림을 열어 MongoDB 배포에 있는 모든 데이터베이스의 모든 비시스템 컬렉션을 감시할 수 있습니다. 이러한 변경 스트림을 만들려면 MongoClient.watch()
메서드 중 하나를 사용합니다.
다음 예제에서 change stream은 MongoClient
가 연결된 배포에서 관찰하는 모든 변경 사항을 출력합니다.
client.watch().subscribe(new PrintDocumentSubscriber());
콘텐츠 필터링
애그리게이션 단계 목록을 watch()
메서드에 전달하여 $changeStream
연산자가 반환한 데이터를 수정할 수 있습니다.
참고
모든 애그리게이션 연산자가 지원되는 것은 아닙니다. 자세한 내용은 MongoDB Server 매뉴얼의 Change Streams 를 참조하세요.
다음 예제에서 change stream은 insert
, update
, replace
및 delete
연산에 해당하는 모든 변경 사항을 출력합니다.
먼저 파이프라인에는 operationType
이 insert
, update
, replace
또는 delete
중 하나인 문서를 필터링하는 $match
단계가 포함되어 있습니다. 그런 다음 fullDocument
을 FullDocument.UPDATE_LOOKUP
로 설정하여 업데이트 후의 문서가 결과에 포함되도록 합니다.
collection.watch( asList( Aggregates.match( Filters.in("operationType", asList("insert", "update", "replace", "delete")) ) ) ).fullDocument(FullDocument.UPDATE_LOOKUP).subscribe(new PrintDocumentSubscriber());