Ejemplo n.º 1
0
 /// <inheritdoc />
 public virtual IAsyncCursor <TResult> Watch <TResult>(
     PipelineDefinition <ChangeStreamDocument <BsonDocument>, TResult> pipeline,
     ChangeStreamOptions options         = null,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     return(wrapped.Watch(pipeline, options, cancellationToken));
 }
Ejemplo n.º 2
0
        public IChangeStreamCursor <TResult> Watch <TResult>(
            PipelineDefinition <ChangeStreamDocument <BsonDocument>, TResult> pipeline,
            ChangeStreamOptions?options         = null,
            CancellationToken cancellationToken = default)
        {
            if (TryGetSession(out IClientSessionHandle? session))
            {
                return(_client.Watch(session, pipeline, options, cancellationToken));
            }

            return(_client.Watch(pipeline, options, cancellationToken));
        }
        private IAsyncCursor <ChangeStreamDocument <BsonDocument> > Watch(IMongoClient client, BsonDocument test)
        {
            var target   = test["target"].AsString;
            var stages   = test["changeStreamPipeline"].AsBsonArray.Cast <BsonDocument>();
            var pipeline = new BsonDocumentStagePipelineDefinition <ChangeStreamDocument <BsonDocument>, ChangeStreamDocument <BsonDocument> >(stages);
            var options  = ParseChangeStreamOptions(test["changeStreamOptions"].AsBsonDocument);

            if (target == "client")
            {
                return(client.Watch(pipeline, options));
            }

            var database = client.GetDatabase(_databaseName);

            if (target == "database")
            {
                return(database.Watch(pipeline, options));
            }

            var collection = database.GetCollection <BsonDocument>(_collectionName);

            if (target == "collection")
            {
                return(collection.Watch(pipeline, options));
            }

            throw new FormatException($"Invalid target: \"{target}\".");
        }
        /// <summary>
        /// Watches changes on all collections in all databases.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <param name="options">The options.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>
        /// A change stream.
        /// </returns>
        public static IAsyncCursor <ChangeStreamDocument <BsonDocument> > Watch(
            this IMongoClient client,
            ChangeStreamOptions options         = null,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            Ensure.IsNotNull(client, nameof(client));
            var emptyPipeline = new EmptyPipelineDefinition <ChangeStreamDocument <BsonDocument> >();

            return(client.Watch(emptyPipeline, options, cancellationToken));
        }
        public OperationResult Execute(CancellationToken cancellationToken)
        {
            try
            {
                var cursor       = _client.Watch(_pipeline, _options, cancellationToken);
                var changeStream = cursor.ToEnumerable().GetEnumerator();

                return(OperationResult.FromChangeStream(changeStream));
            }
            catch (Exception exception)
            {
                return(OperationResult.FromException(exception));
            }
        }