如何在 C# 驱动程序中设置 MongoDB Change Stream 'OperationType'?

2023-11-24

当运行新的 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# 版本的信息很少,我非常困惑! 任何帮助将非常感激。


下面是我用来更新集合 Watch 的代码示例,以检索“事件”而不仅仅是文档更新。

IMongoDatabase sandboxDB = mongoClient.GetDatabase("Sandbox");
IMongoCollection<BsonDocument> collection = sandboxDB.GetCollection<BsonDocument>("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<ChangeStreamDocument<BsonDocument>>().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<BsonDocument> next = changeStream.Current;
enumerator.Dispose();

EmptyPiplineDefinition...Match() 参数也可以是:

"{ $or: [ {operationType: 'replace' }, { operationType: 'insert' }, { operationType: 'update' } ] }"

如果您想使用 $or 命令,或者

"{ operationType: /^[^d]/  }"

在那里扔一些正则表达式。最后一个是说,我想要所有操作类型,除非它们以字母“d”开头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 驱动程序中设置 MongoDB Change Stream 'OperationType'? 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 使用 Lion 上的 FSEvents 跟踪文件重命名/删除

    我正在尝试使用 FSEvents 来检测何时从特定文件夹添加 删除文件 目前 我围绕 FSEvents 实现了一个简单的包装器 它工作得很好 我得到了所有事件 但我现在遇到的问题是 当我在 Finder 中重命名文件时 我捕获了 2 个不同
  • 线程同步。为什么这个锁不足以同步线程[重复]

    这个问题在这里已经有答案了 可能的重复 线程同步 锁究竟如何使内存访问变得 正确 这个问题的灵感来自于这个 我们有以下测试课程 class Test private static object ms Lock new object priv
  • FXML 设置 TableView 列调整大小策略

    如何从 FXML 设置 TableView 的调整大小策略 我这样累了 但它不起作用
  • 使用 Homebrew 更新 OS X 上的 OpenSSL

    我使用的是 MacOS X 10 7 5 并且我需要更新的 OpenSSL 版本 因为握手失败 网上有很多教程 我尝试了以下方法 brew install openssl brew link openssl force 然而 它不起作用 o
  • mq_open() - 打开的文件太多

    我正在尝试编写一个客户端和服务器 它们将使用 POSIX 消息队列交换数据 我尝试通过查看在互联网上看到的示例和课程文档来做到这一点 但是 我陷入困境 当我运行它时 我收到 打开文件太多 错误 这是我的代码 Client int main
  • 将整数值范围映射到Python中的颜色

    我有从 0 到 10000 的整数 我想为每个整数映射一种颜色 然后根据整数值 我想检索与整数值对应的颜色的 RGB 等效值 基本上我想在两种或多种颜色之间有插值效果 例如如果颜色是绿色和红色 则绿色具有最小权重 0 红色具有最高权重 10
  • 使用 AJAX 通过 Flask-WTForms 将条目附加到 FieldList

    我使用 Flask WTForms 在 Flask 中制作了一个简单的表单 家长可以在其中注册自己和他的孩子 家长可以通过单击 添加孩子 按钮来注册任意数量的孩子 WTForms 通过使用 FieldList 功能使这变得非常容易实现 但是
  • LOAD DATA INFILE 轻松将 YYYYMMDD 转换为 YYYY-MM-DD?

    您好 我想导入一个 INFILE 但日期的形式为 AADR 20120403 31 43 31 43 31 4 31 4 1100 AAU 20120403 2 64 2 65 2 56 2 65 85700 AAVX 20120403 1
  • 将 mutate_at 有条件地应用于 R 中数据帧中的特定行

    我在 R 中有一个数据框 如下所示 a b c condition 1 4 2 acap 2 3 1 acap 2 4 3 acap 5 6 8 ncap 5 7 6 ncap 8 7 6 ncap 我正在尝试重新编码条件 ncap 的 a
  • C++:在二叉树中插入节点的指针与指针的指针

    我正在创建一个函数来在二叉树中插入一个元素 首先 我在 Visual Studio 2012 上执行了以下操作 void Insert Nodo root int x if root NULL Nodo n new Nodo n gt va
  • 使用 redux useDispatch 时 useEffect 缺少依赖项

    每当使用反应钩子安装我的组件时 我想获取我的类别useEffect而不是在每次重新渲染时 但我不断收到此警告React Hook useEffect has a missing dependency dispatch 这是我的代码 cons
  • Worksheet 类的 ShowAllData 方法失败

    我注意到当自动过滤器已打开时我的 VBA 脚本不起作用 知道这是为什么吗 wbk Activate Set Criteria Sheets Sheet1 Cells i 1 Set rng Sheets Sheet1 Range Cells
  • 如何在上传目录时删除 Chrome 中的警告消息

    使用上传目录时webkitdirectory在 Chrome 中 会出现一条丑陋的警告消息 该消息内容如下 将 数量 个文件上传到此站点 这将上传 目录名称 中的所有文件 仅当您信任该站点时才执行此操作 这是最近在 Chrome 版本 66
  • MSI 不在 C# 中运行

    我正在尝试运行一个MSI使用 Process Start 方法从 C 文件 MSI 文件很好 因为我可以正常运行它 但是当我尝试在某些 C 代码中运行 MSI 文件时 我收到以下错误 这个安装包无法 被打开 验证该包 存在 并且您可以访问它
  • java.lang.NumberFormatException用于将字符串转换为long [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我正在尝试将字符串转换为长字符串 它会抛出NumberFormatException 我不认为这超出了范围long at all 这是要转换的代码 其中count strng
  • 在 PYSPARK 中运行收集时出错

    我正在尝试将网站名称与 URL 分开 例如 如果 URL 是 www google com 则输出应为 google 我尝试了下面的代码 除了最后一行 websites collect 之外 一切正常 我使用数据框来存储网站名称 然后将其转
  • Java 泛型问题:类型参数 E 不在其范围内

    我有一个关于泛型的问题 我有这个方法 根本无法编译 编译器告诉我 type parameter E is not within its bound 我通常在理解编译器错误方面没有问题 但这一个非常棘手 也许我对泛型的了解需要提高 谁能告诉我
  • Javascript将数据保存到文件系统(有用户提示)

    在最新的浏览器 支持 html5 中实现以下目标的最佳方法是什么 我主要针对的是 Google Chrome 在我的应用程序中 数据是通过 JavaScript 操作的 并且需要使用浏览器提示 另存为对话框 将输出写入文件系统 我不确定写入
  • JNI:从C代码到Java和JNI

    背景 我正在 Eclipse 中开发 Android 应用程序 现在遇到问题 需要您的帮助 所以我必须调用写成的函数C来自JAVA应用程序 但在我编写代码的方式上我有一些问题您可以在下面看到 我正在等待您的答案和想法 C Code typd
  • 如何在 C# 驱动程序中设置 MongoDB Change Stream 'OperationType'?

    当运行新的 MongDB 服务器版本 3 6 并尝试将更改流监视添加到集合以获取新插入和文档更新的通知时 我只收到更新通知 而不收到插入通知 这是我尝试添加手表的默认方式 IMongoDatabase mongoDatabase mongo