如何在C#驱动程序中设置MongoDB Change Stream’ManageType’?
运行新的MongDB服务器版本3.6,并尝试将更改流监视添加到集合以获取新插入和文档更新的通知时,我只接收更新通知,而不是插入。
这是我尝试添加手表的默认方式:
IMongoDatabase mongoDatabase = mongoClient.GetDatabase("Sandbox"); IMongoCollection collection = mongoDatabase.GetCollection("TestCollection"); var changeStream = collection.Watch().ToEnumerable().GetEnumerator(); changeStream.MoveNext(); var next = changeStream.Current;
然后我从MongoDB下载了C#源代码,看看他们是如何做到这一点的。 查看他们的更改流手表的测试代码,他们创建一个新文档(插入),然后立即更改该文档(更新),然后设置Change Stream手表以接收’更新’通知。 没有给出关于如何观察“插入”通知的示例。
我已经查看了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, ChangeStreamDocument> pipeline = new EmptyPipelineDefinition<ChangeStreamDocument>().Match(Builders<ChangeStreamDocument>.Filter.Text(json,"json"));
然后运行以下语句会抛出exception:
{“命令聚合失败:$ match with $ text仅允许作为第一个管道阶段。”}
没有其他filter选项也有效,我还没有找到一种方法只需输入JSON作为字符串来设置’operationType’。
var changeStream = collection.Watch(pipeline, options).ToEnumerable().GetEnumerator(); changeStream.MoveNext(); var next = changeStream.Current;
我唯一的目标是能够使用C#驱动程序设置’operationType’。 有谁知道我做错了或者用C#驱动程序试过这个并且成功了吗?
在阅读了大量网页之后,关于MongoDB驱动程序的C#版本的信息非常少,我非常困难! 任何帮助将非常感激。
以下是我用于更新集合的代码示例Watch以检索除了文档更新之外的“事件”。
IMongoDatabase sandboxDB = mongoClient.GetDatabase("Sandbox"); IMongoCollection collection = sandboxDB.GetCollection ("TestCollection"); //Get the whole document instead of just the changed portion ChangeStreamOptions options = new ChangeStreamOptions() { FullDocument = ChangeStreamFullDocumentOption.UpdateLookup }; //The operationType can be one of the following: insert, update, replace, delete, invalidate var pipeline = new EmptyPipelineDefinition>().Match("{ operationType: { $in: [ 'replace', 'insert', 'update' ] } }"); var changeStream = collection.Watch(pipeline, options).ToEnumerable().GetEnumerator(); changeStream.MoveNext(); //Blocks until a document is replaced, inserted or updated in the TestCollection ChangeStreamDocument next = changeStream.Current; enumerator.Dispose();
EmptyPiplineDefinition … Match()参数也可以是:
"{ $or: [ {operationType: 'replace' }, { operationType: 'insert' }, { operationType: 'update' } ] }"
如果你想使用$或命令,或者
"{ operationType: /^[^d]/ }"
在那里扔一点正则表达式。 最后一个是说,我想要所有的operationTypes,除非它们以字母’d’开头。
上述就是C#学习教程:如何在C#驱动程序中设置MongoDB Change Stream’ManageType’?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1003353.html