无法让 MongoDB 更改流文档出现在观察者服务中

tva*_*her 5 c# mongodb changestream

我有一项服务需要监视 Mongo DB 上的集合以在系统中创建更改。我已设法使用 C# 驱动程序建立与副本集的连接,并使用以下代码来测试更改流。

public async Task WatchLoopAsync()
{
    var options = new ChangeStreamOptions
    {
        FullDocument = ChangeStreamFullDocumentOption.UpdateLookup,
    };
            
    using (var cursor = await _collection.WatchAsync(options))
    {
        _logger.LogInformation("Watching collection {String}", 
            _deployments.CollectionNamespace);
                
        await cursor.ForEachAsync(changeStreamDocument =>
        {
            var document = changeStreamDocument.FullDocument;
            _logger.LogInformation("Received document: {String}", 
                document.ToString());
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个日志显示,表明它正在使用正确的命名空间监视集合。然后,我将一个文档添加到集合中,希望看到某些内容记录为“已接收文档:...”,但没有任何记录。

我遵循此处文档中给出的异步模式。

tva*_*her 0

我的特定问题的解决方案是,由于 C# 中的属性大小写约定,当更改流接收代码无法将属性“名称”与“名称”的对象属性匹配时,它会引发异常。

为了解决这个问题,我使用了以下代码片段:

var conventionPack = new ConventionPack
{
    new CamelCaseElementNameConvention()
};
ConventionRegistry.Register("camelCase", conventionPack, t => true);
Run Code Online (Sandbox Code Playgroud)

这会将数据库驱动程序注册为在将实体映射到 BSON 时使用驼峰式大小写约定。