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); }
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); }
//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()); }
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()); }
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); }