当运行新的 MongDB 服务器版本 3.6 并尝试将更改流监视添加到集合以获取新插入和文档更新的通知时,我只收到更新通知,而不收到插入通知。
这是我尝试添加手表的默认方式:
IMongoDatabase mongoDatabase = mongoClient.GetDatabase("Sandbox");
IMongoCollection<BsonDocument> collection = mongoDatabase.GetCollection<BsonDocument>("TestCollection");
var changeStream = collection.Watch().ToEnumerable().GetEnumerator();
changeStream.MoveNext();
var next = changeStream.Current;
然后我从 MongoDB 下载了 C# 源代码,看看他们是如何做到这一点的。查看更改流监视的测试代码,他们创建一个新文档(插入),然后立即更改该文档(更新),然后设置更改流监视以接收“更新”通知。
没有给出如何监视“插入”通知的示例。
我查看了 MongoDB 网站和 SO 上的 Java 和 NodeJS 示例,它们似乎很简单,并且定义了一种查看插入和更新的方法:
var changeStream = collection.watch({ '$match': { $or: [ { 'operationType': 'insert' }, { 'operationType': 'update' } ] } });
C# 驱动程序的 API 截然不同,我本以为他们会为 C# 保留与 Java 和 NodeJS 相同的 API。我没有找到或很少找到 C# 做同样事情的例子。
我最接近的是以下尝试,但仍然失败,并且 C# 版本的文档非常有限(或者我没有找到正确的位置)。设置如下:
String json = "{ '$match': { 'operationType': { '$in': ['insert', 'update'] } } }";
var options = new ChangeStreamOptions { FullDocument = ChangeStreamFullDocumentOption.UpdateLookup };
PipelineDefinition<ChangeStreamDocument<BsonDocument>, ChangeStreamDocument<BsonDocument>> pipeline = new EmptyPipelineDefinition<ChangeStreamDocument<BsonDocument>>().Match(Builders<ChangeStreamDocument<BsonDocument>>.Filter.Text(json,"json"));
然后运行下面的语句会抛出异常:
{“命令聚合失败:$match 与 $text 只允许作为
第一个管道阶段。”}
其他过滤器选项也不起作用,而且我还没有找到一种方法来仅输入 JSON 作为字符串来设置“操作类型”。
var changeStream = collection.Watch(pipeline, options).ToEnumerable().GetEnumerator();
changeStream.MoveNext();
var next = changeStream.Current;
我的唯一目标是能够使用 C# 驱动程序设置“操作类型”。有谁知道我做错了什么或者已经使用 C# 驱动程序尝试过并取得了成功?
在阅读了大量网页后,关于 MongoDB 驱动程序的 C# 版本的信息很少,我非常困惑!
任何帮助将非常感激。