public IUpdateStream <TDocument> Subscribe(UpdateStreamFilter updateStreamFilter,
                                                   CancellationToken cancellationToken = default)
        {
            var updateStream = new UpdateStream <TDocument>();

            PipelineDefinition <ChangeStreamDocument <TDocument>, ChangeStreamDocument <TDocument> > pipeline =
                new EmptyPipelineDefinition <ChangeStreamDocument <TDocument> >();


            pipeline = pipeline.Match(x =>
                                      x.OperationType == ChangeStreamOperationType.Update &&
                                      updateStreamFilter.UpdateTypes.HasFlag(UpdateTypes.Update) ||
                                      x.OperationType == ChangeStreamOperationType.Insert &&
                                      updateStreamFilter.UpdateTypes.HasFlag(UpdateTypes.Insert) ||
                                      x.OperationType == ChangeStreamOperationType.Delete &&
                                      updateStreamFilter.UpdateTypes.HasFlag(UpdateTypes.Delete) ||
                                      x.OperationType == ChangeStreamOperationType.Replace &&
                                      updateStreamFilter.UpdateTypes.HasFlag(UpdateTypes.Replace) ||
                                      updateStreamFilter.UpdateTypes == UpdateTypes.Undefined
                                      );


            if (updateStreamFilter.RtId.HasValue)
            {
                var filter = Builders <ChangeStreamDocument <TDocument> > .Filter.Eq("fullDocument." + Constants.IdField, updateStreamFilter.RtId.Value.ToObjectId());

                pipeline = pipeline.Match(filter);
            }

            updateStream.Watch(_documentCollection, pipeline, cancellationToken);
            return(updateStream);
        }
Exemplo n.º 2
0
        private static PipelineDefinition <ChangeStreamDocument <MongoEventCommit>, ChangeStreamDocument <MongoEventCommit> >?Match(string?streamFilter)
        {
            var result = new EmptyPipelineDefinition <ChangeStreamDocument <MongoEventCommit> >();

            var byStream = Filtering.ByChangeInStream(streamFilter);

            if (byStream != null)
            {
                var filterBuilder = Builders <ChangeStreamDocument <MongoEventCommit> > .Filter;

                var filter = filterBuilder.Or(filterBuilder.Ne(x => x.OperationType, ChangeStreamOperationType.Insert), byStream);

                return(result.Match(filter));
            }

            return(result);
        }
Exemplo n.º 3
0
        //subscribers selection
        protected override Task <List <Subscriber <ObjectId> > > LookupStartingWithDeliveryTypes(
            SubscriptionParameters parameters, SubscribersRangeParameters <ObjectId> subscribersRange)
        {
            var pipeline = new EmptyPipelineDefinition <TDeliveryType>()
                           .As <TDeliveryType, TDeliveryType, TDeliveryType>();

            var pipeline2 = pipeline.Match(ToDeliveryTypeSettingsFilter(parameters, subscribersRange))
                            .As <TDeliveryType, TDeliveryType, BsonDocument>();

            //var bsonDocs = _context.SubscriberDeliveryTypeSettings.Aggregate(pipeline2).ToListAsync();
            //string json = subscribers.Select(x => x.ToJsonIntended()).Join(",");
            //return null;

            PipelineDefinition <TDeliveryType, Subscriber <ObjectId> > pipelineProjected
                = AddSubscribersProjectionAndLimitStage(pipeline2, subscribersRange);

            return(_collectionFactory
                   .GetCollection <TDeliveryType>()
                   .Aggregate(pipelineProjected)
                   .ToListAsync());
        }
Exemplo n.º 4
0
        protected virtual Task <List <Subscriber <ObjectId> > > LookupStartingWithTopics(
            SubscriptionParameters parameters, SubscribersRangeParameters <ObjectId> subscribersRange)
        {
            var pipeline = new EmptyPipelineDefinition <TTopic>()
                           .As <TTopic, TTopic, TTopic>();

            var pipeline2 = pipeline.Match(ToTopicSettingsFilter(parameters, subscribersRange))
                            .As <TTopic, TTopic, BsonDocument>();

            pipeline2 = AddCategoryLookupStages(pipeline2, parameters, subscribersRange);
            pipeline2 = AddDeliveryTypeLookupStages(pipeline2, parameters, subscribersRange);

            //var bsonDocs = _collectionFactory.GetCollection<TTopic>().Aggregate(pipeline2).ToList();
            //string jsonResults = bsonDocs.Select(x => x.ToJsonIntended()).Join(",");
            //return null;

            PipelineDefinition <TTopic, Subscriber <ObjectId> > pipelineProjected =
                AddSubscribersProjectionAndLimitStage(pipeline2, subscribersRange);

            return(_collectionFactory.GetCollection <TTopic>()
                   .Aggregate(pipelineProjected)
                   .ToListAsync());
        }
Exemplo n.º 5
0
        private PipelineDefinition <object, object> GetPipline()
        {
            PipelineDefinition <object, object> pipline = new EmptyPipelineDefinition <object>();

            if (!string.IsNullOrWhiteSpace(SearchCondition))
            {
                pipline = pipline.Match(MongoTable.QueryToFilter(SearchCondition));
            }

            if (!string.IsNullOrWhiteSpace(OrderByField))
            {
                var sortBuilder = new SortDefinitionBuilder <object>();
                var sort        = Ascending ? sortBuilder.Ascending(OrderByField) : sortBuilder.Descending(OrderByField);
                pipline = pipline.Sort(sort);
            }

            if (skipcount > 0)
            {
                pipline = pipline.Skip(skipcount);
            }

            return(pipline);
        }