case class ChangeStreamObservable[TResult](wrapped: ChangeStreamPublisher[TResult]) extends Observable[ChangeStreamDocument[TResult]] with Product with Serializable
Observable for change streams.
Note: The ChangeStreamDocument
class will not be applicable for all change stream outputs.
If using custom pipelines that radically change the result, the ChangeStreamObservable#withDocumentClass method should be used
to provide an alternative document format.
- TResult
The type of the result.
- wrapped
the underlying java ChangeStreamIterable
- Since
2.2
- Note
Requires MongoDB 3.6 or greater
- Alphabetic
- By Inheritance
- ChangeStreamObservable
- Serializable
- Product
- Equals
- Observable
- Publisher
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new ChangeStreamObservable(wrapped: ChangeStreamPublisher[TResult])
- wrapped
the underlying java ChangeStreamIterable
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def andThen[U](pf: PartialFunction[Try[ChangeStreamDocument[TResult]], U]): Observable[ChangeStreamDocument[TResult]]
Applies the side-effecting function to the final result of this Observable and, returns a new Observable with the result of this Observable.
Applies the side-effecting function to the final result of this Observable and, returns a new Observable with the result of this Observable.
This method allows one to enforce that the callbacks are executed in a specified order.
Note that if one of the chained
andThen
callbacks throws an exception, that exception is not propagated to the subsequentandThen
callbacks. Instead, the subsequentandThen
callbacks are given the original value of this Observable.The following example prints out
10
:Observable(1 to 10) andThen { case r => sys.error("runtime exception") } andThen { case Success(x) => print(x) case Failure(t) => print("Failure") }
- U
the result type of the
- pf
the partial function to pattern match against
- returns
an
- Definition Classes
- Observable
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def batchSize(batchSize: Int): ChangeStreamObservable[TResult]
Sets the number of documents to return per batch.
Sets the number of documents to return per batch.
- batchSize
the batch size
- returns
this
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- def collation(collation: Collation): ChangeStreamObservable[TResult]
Sets the collation options
Sets the collation options
A null value represents the server default.
- collation
the collation options to use
- returns
this
- def collect[S](pf: PartialFunction[ChangeStreamDocument[TResult], S]): Observable[S]
Builds a new Observable by applying a partial function to all elements.
Builds a new Observable by applying a partial function to all elements.
Example:
val justStrings = Observable(Iterable("this", 1, 2, "that")).collect{ case s: String => s }
- S
the resulting type of each item in the Observable
- pf
function that transforms each result of the receiver into an Observable and passes each result of that Observable to the returned Observable.
- returns
an Observable with transformed results and / or error.
- Definition Classes
- Observable
- def collect[S](): SingleObservable[Seq[ChangeStreamDocument[TResult]]]
Collects all the values of the Observable into a list and returns a new Observable with that list.
Collects all the values of the Observable into a list and returns a new Observable with that list.
Example:
val listOfNumbers = Observable(1 to 100).collect()
- returns
an Observable that emits a single item, the result of accumulator.
- Definition Classes
- Observable
- Note
If the Observable is large then this will consume lots of memory! If the underlying Observable is infinite this Observable will never complete.
- See also
Uses foldLeft underneath
- def comment(comment: BsonValue): ChangeStreamObservable[TResult]
Sets the comment for this operation.
Sets the comment for this operation. A null value means no comment is set.
- comment
the comment
- returns
this
- Since
4.6
- Note
The comment can be any valid BSON type for server versions 4.4 and above. Server versions between 3.6 and 4.2 only support string as comment, and providing a non-string type will result in a server-side error.
- def comment(comment: String): ChangeStreamObservable[TResult]
Sets the comment for this operation.
Sets the comment for this operation. A null value means no comment is set.
- comment
the comment
- returns
this
- Since
4.6
- Note
Requires MongoDB 3.6 or greater
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def fallbackTo[U >: ChangeStreamDocument[TResult]](that: Observable[U]): Observable[U]
Creates a new Observable which returns the results of this Observable, if there is an error, it will then fallback to returning the results of the alternative "
that
" Observable.Creates a new Observable which returns the results of this Observable, if there is an error, it will then fallback to returning the results of the alternative "
that
" Observable.If both Observables fail, the resulting Observable holds the throwable object of the first Observable.
Example:
val fallBackObservable = Observable(1 to 100) fallbackTo Observable(200 to 300)
Ensuring results from a Single Observer
fallbackTo
can potentially emit results from either Observer. This often isn't desirable, so to ensure only a single Observable issues results combine with the collect[S]()* method eg:val results = Observable(1 to 100).collect() fallbackTo Observable(200 to 300).collect()
- U
the type of the returned Observable
- that
the Observable to fallback to if
this
Observable fails- returns
an Observable that will fallback to the
that
Observable shouldthis
Observable complete with anonError
.
- Definition Classes
- Observable
- def filter(predicate: (ChangeStreamDocument[TResult]) => Boolean): Observable[ChangeStreamDocument[TResult]]
Creates a new Observable by filtering the value of the current Observable with a predicate.
Creates a new Observable by filtering the value of the current Observable with a predicate.
If the current Observable fails, then the resulting Observable also fails.
Example:
val oddValues = Observable(1 to 100) filter { _ % 2 == 1 }
- predicate
the function that is applied to each result emitted if it matches that result is passes to the returned Observable
- returns
an Observable only containing items matching that match the predicate
- Definition Classes
- Observable
- def first(): SingleObservable[ChangeStreamDocument[TResult]]
Helper to return a single observable limited to the first result.
Helper to return a single observable limited to the first result.
- returns
a single observable which will the first result.
- Since
4.0
- def flatMap[S](mapFunction: (ChangeStreamDocument[TResult]) => Observable[S]): Observable[S]
Creates a new Observable by applying a function to each emitted result of the Observable.
Creates a new Observable by applying a function to each emitted result of the Observable. If the Observable calls errors then then the new Observable will also contain this exception.
As each emitted item passed to
onNext
returns an Observable, we tightly control the requests to the parent Observable. The requested amount is then passed to the child Observable and only when that is completed does the parent become available for requesting more data.Example:
def f = Observable(1 to 10) def g = Observable(100 to 100) val h = for { x: Int <- f // returns Observable(1 to 10) y: Int <- g // returns Observable(100 to 100) } yield x + y
is translated to:
f flatMap { (x: Int) => g map { (y: Int) => x + y } }
- S
the resulting type of each item in the Observable
- mapFunction
function that transforms a each result of the receiver into an Observable and passes each result of that Observable to the returned Observable.
- returns
an Observable with transformed results and / or error.
- Definition Classes
- Observable
- def foldLeft[S](initialValue: S)(accumulator: (S, ChangeStreamDocument[TResult]) => S): SingleObservable[S]
Creates a new Observable that contains the single result of the applied accumulator function.
Creates a new Observable that contains the single result of the applied accumulator function.
The first item emitted by the Observable is passed to the supplied accumulator function alongside the initial value, then all other emitted items are passed along with the previous result of the accumulator function.
Example:
val countingObservable = Observable(1 to 100) foldLeft(0)((v, i) => v + 1)
- initialValue
the initial (seed) accumulator value
- accumulator
an accumulator function to be invoked on each item emitted by the source Observable, the result of which will be used in the next accumulator call.
- returns
an Observable that emits a single item, the result of accumulator.
- Definition Classes
- Observable
- Note
If this function is used to collect results into a collection then it could use lots of memory! If the underlying Observable is infinite this Observable will never complete.
- def foreach[U](doOnEach: (ChangeStreamDocument[TResult]) => U): Unit
Applies a function applied to each emitted result.
Applies a function applied to each emitted result.
Automatically requests all results
- U
the resulting type after the transformation
- doOnEach
the anonymous function applied to each emitted item
- Definition Classes
- Observable
- def fullDocument(fullDocument: FullDocument): ChangeStreamObservable[TResult]
Sets the fullDocument value.
Sets the fullDocument value.
- fullDocument
the fullDocument
- returns
this
- def fullDocumentBeforeChange(fullDocumentBeforeChange: FullDocumentBeforeChange): ChangeStreamObservable[TResult]
Sets the fullDocumentBeforeChange value.
Sets the fullDocumentBeforeChange value.
- fullDocumentBeforeChange
the fullDocumentBeforeChange
- returns
this
- Since
4.7
- Note
Requires MongoDB 6.0 or greater
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def head(): Future[ChangeStreamDocument[TResult]]
Returns the head of the Observable in a
scala.concurrent.Future
.Returns the head of the Observable in a
scala.concurrent.Future
.- returns
the head result of the Observable.
- Definition Classes
- Observable
- def headOption(): Future[Option[ChangeStreamDocument[TResult]]]
Returns the head option of the Observable in a
scala.concurrent.Future
.Returns the head option of the Observable in a
scala.concurrent.Future
.- returns
the head option result of the Observable.
- Definition Classes
- Observable
- Since
2.2
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def map[S](mapFunction: (ChangeStreamDocument[TResult]) => S): Observable[S]
Creates a new Observable by applying a function to each emitted result of the Observable.
Creates a new Observable by applying a function to each emitted result of the Observable. If the Observable calls errors then then the new Observable will also contain this exception.
Example:
def f = Observable(1 to 10) def g = Observable(100 to 100) val h = for { x: Int <- f // returns Observable(1 to 10) y: Int <- g // returns Observable(100 to 100) } yield x + y
is translated to:
f flatMap { (x: Int) => g map { (y: Int) => x + y } }
- S
the resulting type of each item in the Observable
- mapFunction
function that transforms a each result of the receiver and passes the result to the returned Observable
- returns
an Observable with transformed results and / or error.
- Definition Classes
- Observable
- def maxAwaitTime(duration: Duration): ChangeStreamObservable[TResult]
Sets the maximum await execution time on the server for this operation.
Sets the maximum await execution time on the server for this operation.
- duration
the duration
- returns
this
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- def observeOn(context: ExecutionContext): Observable[ChangeStreamDocument[TResult]]
Use a specific execution context for future operations
Use a specific execution context for future operations
- context
the execution context
- returns
an Observable that uses the specified execution context
- Definition Classes
- Observable
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- def recover[U >: ChangeStreamDocument[TResult]](pf: PartialFunction[Throwable, U]): Observable[U]
Creates a new Observable that will handle any matching throwable that this Observable might contain.
Creates a new Observable that will handle any matching throwable that this Observable might contain. If there is no match, or if this Observable contains a valid result then the new Observable will contain the same.
Example:
mongoExceptionObservable recover { case e: MongoException => 0 } // final result: 0 mongoExceptionObservable recover { case e: NotFoundException => 0 } // result: exception
- U
the type of the returned Observable
- pf
the partial function used to pattern match against the
onError
throwable- returns
an Observable that will handle any matching throwable and not error.
- Definition Classes
- Observable
- def recoverWith[U >: ChangeStreamDocument[TResult]](pf: PartialFunction[Throwable, Observable[U]]): Observable[U]
Creates a new Observable that will handle any matching throwable that this Observable might contain by assigning it a value of another Observable.
Creates a new Observable that will handle any matching throwable that this Observable might contain by assigning it a value of another Observable.
If there is no match, or if this Observable contains a valid result then the new Observable will contain the same result.
Example:
successfulObservable recoverWith { case e: ArithmeticException => observableB } // result: successfulObservable mongoExceptionObservable recoverWith { case t: Throwable => observableB } // result: observableB
Ensuring results from a Single Observer
recoverWith
can potentially emit results from either Observer. This often isn't desirable, so to ensure only a single Observable issues results combine with the collect[S]()* method eg:val results = Observable(1 to 100) .collect() .recoverWith({ case t: Throwable => Observable(200 to 300).collect() }) .subscribe((i: Seq[Int]) => print(results))
- U
the type of the returned Observable
- pf
the partial function used to pattern match against the
onError
throwable- returns
an Observable that will handle any matching throwable and not error but recover with a new observable
- Definition Classes
- Observable
- def resumeAfter(resumeToken: Document): ChangeStreamObservable[TResult]
Sets the logical starting point for the new change stream.
Sets the logical starting point for the new change stream.
- resumeToken
the resume token
- returns
this
- def showExpandedEvents(showExpandedEvents: Boolean): ChangeStreamObservable[TResult]
Sets whether to include expanded change stream events, which are: createIndexes, dropIndexes, modify, create, shardCollection, reshardCollection, refineCollectionShardKey.
Sets whether to include expanded change stream events, which are: createIndexes, dropIndexes, modify, create, shardCollection, reshardCollection, refineCollectionShardKey. False by default.
- showExpandedEvents
true to include expanded events
- returns
this
- Since
4.7
- Note
Requires MongoDB 6.0 or greater
- def startAfter(startAfter: Document): ChangeStreamObservable[TResult]
Sets the logical starting point for the new change stream.
Sets the logical starting point for the new change stream.
This will allow users to watch collections that have been dropped and recreated or newly renamed collections without missing any notifications.
- startAfter
the resume token
- returns
this
- Since
2.7
- Note
Requires MongoDB 4.2 or greater
,The server will report an error if both
startAfter
andresumeAfter
are specified.- See also
- def startAtOperationTime(startAtOperationTime: BsonTimestamp): ChangeStreamObservable[TResult]
The change stream will only provide changes that occurred at or after the specified timestamp.
The change stream will only provide changes that occurred at or after the specified timestamp.
Any command run against the server will return an operation time that can be used here. The default value is an operation time obtained from the server before the change stream was created.
- startAtOperationTime
the start at operation time
- returns
this
- Since
2.4
- Note
Requires MongoDB 4.0 or greater
- def subscribe(observer: Observer[_ >: ChangeStreamDocument[TResult]]): Unit
Request
Observable
to start streaming data.Request
Observable
to start streaming data.This is a "factory method" and can be called multiple times, each time starting a new Subscription. Each
Subscription
will work for only a single Observer.If the
Observable
rejects the subscription attempt or otherwise fails it will signal the error via Observer.onError.- observer
the
Observer
that will consume signals from thisObservable
- Definition Classes
- ChangeStreamObservable → Observable
- def subscribe(doOnNext: (ChangeStreamDocument[TResult]) => Any, doOnError: (Throwable) => Any, doOnComplete: () => Any): Unit
Subscribes to the Observable and requests
Long.MaxValue
.Subscribes to the Observable and requests
Long.MaxValue
.Uses the default or overridden
onNext
,onError
,onComplete
partial functions.- doOnNext
anonymous function to apply to each emitted element.
- doOnError
anonymous function to apply if there is an error.
- doOnComplete
anonymous function to apply on completion.
- Definition Classes
- Observable
- def subscribe(doOnError: (Throwable) => Any, doOnComplete: () => Any): Unit
Subscribes to the Observable and requests
Long.MaxValue
.Subscribes to the Observable and requests
Long.MaxValue
.- doOnError
anonymous function to apply if there is an error.
- doOnComplete
anonymous function to apply on completion.
- Definition Classes
- Observable
- def subscribe(doOnNext: (ChangeStreamDocument[TResult]) => Any, doOnError: (Throwable) => Any): Unit
Subscribes to the Observable and requests
Long.MaxValue
.Subscribes to the Observable and requests
Long.MaxValue
.- doOnNext
anonymous function to apply to each emitted element.
- doOnError
anonymous function to apply if there is an error.
- Definition Classes
- Observable
- def subscribe(doOnNext: (ChangeStreamDocument[TResult]) => Any): Unit
Subscribes to the Observable and requests
Long.MaxValue
.Subscribes to the Observable and requests
Long.MaxValue
.- doOnNext
anonymous function to apply to each emitted element.
- Definition Classes
- Observable
- def subscribe(observer: Subscriber[_ >: ChangeStreamDocument[TResult]]): Unit
Handles the automatic boxing of a Java
Observable
so it conforms to the interface.Handles the automatic boxing of a Java
Observable
so it conforms to the interface.- observer
the
Observer
that will consume signals from thisObservable
- Definition Classes
- Observable → Publisher
- Note
Users should not have to implement this method but rather use the Scala
Observable
.
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def transform[S](mapFunction: (ChangeStreamDocument[TResult]) => S, errorMapFunction: (Throwable) => Throwable): Observable[S]
Creates a new Observable by applying the
resultFunction
function to each emitted result.Creates a new Observable by applying the
resultFunction
function to each emitted result. If there is an error andonError
is called theerrorFunction
function is applied to the failed result.- S
the resulting type of each item in the Observable
- mapFunction
function that transforms a each result of the receiver and passes the result to the returned Observable
- errorMapFunction
function that transforms a failure of the receiver into a failure of the returned observer
- returns
an Observable with transformed results and / or error.
- Definition Classes
- Observable
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- def withDocumentClass[T](clazz: Class[T]): Observable[T]
Returns an
Observable
containing the results of the change stream based on the document class provided.Returns an
Observable
containing the results of the change stream based on the document class provided.- T
the result type
- clazz
the class to use for the raw result.
- returns
an Observable
- final def withFilter(p: (ChangeStreamDocument[TResult]) => Boolean): Observable[ChangeStreamDocument[TResult]]
Used by for-comprehensions.
Used by for-comprehensions.
- Definition Classes
- Observable
- def zip[U](that: Observable[U]): Observable[(ChangeStreamDocument[TResult], U)]
Zips the values of
this
andthat
Observable, and creates a new Observable holding the tuple of their results.Zips the values of
this
andthat
Observable, and creates a new Observable holding the tuple of their results.If
this
Observable fails, the resulting Observable is failed with the throwable stored inthis
. Otherwise, ifthat
Observable fails, the resulting Observable is failed with the throwable stored inthat
.It will only emit as many items as the number of items emitted by the source Observable that emits the fewest items.
- U
the type of the
that
Observable- that
the Observable to zip with
- returns
a new zipped Observable
- Definition Classes
- Observable
Deprecated Value Members
- def completeWithUnit(): SingleObservable[Unit]
Convert this observable so that it emits a single Unit to Observer.onNext before calling Observer.onComplete.
Convert this observable so that it emits a single Unit to Observer.onNext before calling Observer.onComplete.
If the underlying observable errors then that is propagated to the
Observer
. This method is especially useful for chainingObservable[Void]
in for comprehensions.- returns
a single observable which emits Unit before completion.
- Definition Classes
- Observable
- Annotations
- @deprecated
- Deprecated
(Since version 5.0) Is no longer needed because of the
ToSingleObservableUnit
implicit class. Scheduled for removal in a major release- Since
4.4
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
This is the documentation for the MongoDB Scala driver.
Driver structure
The mongodb scala driver.
To get started you need a MongoClient instance, either from a connection string or via a org.mongodb.scala.MongoClientSettings.
Notable packages include: