变更流:为什么FullDocument返回为null?

时间:2019-04-08 14:10:51

标签: c# mongodb mongodb-.net-driver changestream

我正在使用C#驱动程序来获取Change流。但是现在我要过滤传入的文档。阅读一些文本和stackoverflow答案后,我有两种方法可以做到这一点。但是出于某种原因,一种方式是将FullDocument退还给我,而另一种则没有。

我想了解为什么会这样。如果有人遇到或知道是什么原因。请分享您的评论。

以下管道有效。表示我可以获得完整文档。

var pipeline = new EmptyPipelineDefinition<ChangeStreamDocument<BsonDocument>>()
                                    .Match("{ operationType: { $in: [ 'replace', 'insert', 'delete' ] } }")
                                    .Match($@"{{ ""fullDocument.ProcessUniqueId"" : {{ $ne: ""{Constants.UniqueInstanceGuid}"" }} }}");

下面的管道不起作用,这意味着我将FullDocument设置为null

var pipeline = new EmptyPipelineDefinition<ChangeStreamDocument<BsonDocument>>()
                    .Match(Builders<ChangeStreamDocument<BsonDocument>>
                        .Filter
                        .In(x => x.OperationType, new List<ChangeStreamOperationType> { ChangeStreamOperationType.Insert, ChangeStreamOperationType.Update, ChangeStreamOperationType.Delete }))
                    .Match(Builders<ChangeStreamDocument<BsonDocument>>
                        .Filter.Ne(x => x.FullDocument["ProcessUniqueId"], Constants.UniqueInstanceGuid)); 

并且主循环处理更改流

using (var cursor = await Database.GetCollection<BsonDocument>("VERSIONS").WatchAsync(pipeline)) {

                await cursor.ForEachAsync((change) => {

                    Console.WriteLine(change.Id);
                });
}

0 个答案:

没有答案