我正在使用 C# 驱动程序来获取更改流。但现在我想过滤传入的文件。在阅读了一些文本和 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);
});
}