有没有办法调试为什么在使用 .net/C# 驱动程序迭代更改流游标时监视的集合不返回任何更改流文档?我没有收到任何异常,代码只是不断迭代文档批次(
MoveNext()
),而这些批次中没有任何文档(cursor.Current.Count()
)。
在此发布之前,我检查了是否可以使用 mongoDB shell(mongosh) 观看完全相同的集合,并且我能够使用 mongosh 成功接收更新通知。
我使用完全相同的用户从 .net/C# 和 mongosh 观看相同的集合
以下是用于执行特定集合的监视的示例 C# 代码:
var var _cursor = _collection.Watch()
var updateResult = await _collection.UpdateOneAsync(filter, updateBuilder.Combine(updateList));
while (_cursor.MoveNext() && _cursor.Current.Count() == 0)
{
foreach (var item in _cursor.Current)
{
Console.WriteLine("Hello!");
Console.WriteLine(item);
}
}
_cursor.dispose();
return updateResult.ModifiedCount == 1;
所以,这是一个逻辑错误,在这种情况下我没有意识到。我太沉迷于检查每批变更流文档的计数,我认为这是不必要的。在我的案例中实际有效的更正代码如下:
var _cursor = _collection.Watch()
var updateResult = await _collection.UpdateOneAsync(filter, updateBuilder.Combine(updateList));
while (_cursor.MoveNext())
{
foreach (var item in _cursor.Current)
{
Console.WriteLine("Hello!");
Console.WriteLine(item);
}
}
_cursor.dispose();
return updateResult.ModifiedCount == 1;