为了账号安全,请及时绑定邮箱和手机立即绑定

在检索或执行多个查询之前确认文档存在

在检索或执行多个查询之前确认文档存在

C#
潇湘沐 2023-08-20 11:03:58
我需要使用用户输入从集合中检索一个 BsonDocument。我已经找到了一种简单的方法来做到这一点:var filter = Builders<BsonDocument>.Filter.Eq("name", name);var doc = await myCollection.Find(filter).SingleAsync();这工作正常,但是当没有匹配时,它会System.InvalidOperationException在SingleAsync方法中抛出一个:Unhandled Exception: System.InvalidOperationException: Sequence contains no elements   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)   at MongoDB.Driver.IAsyncCursorExtensions.SingleAsync[TDocument](IAsyncCursor`1 cursor, CancellationToken cancellationToken)   at MongoDB.Driver.IAsyncCursorSourceExtensions.SingleAsync[TDocument](IAsyncCursorSource`1 source, CancellationToken cancellationToken)   at MyProgram.Main.Test() in D:\MyProgram\Main.cs:line 22   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)--- End of stack trace from previous location where exception was thrown ---   at System.Threading.ThreadPoolWorkQueue.Dispatch()我想我可以在每次发生这种异常时捕获它,但这是正确的方法吗?我也可以使用它来检查是否存在AnyAsync,但这将涉及执行两个单独的查询,这可能会损害数据库性能。这样做的正确方法是什么?
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

问题SingleAsync()是,SingleAsync如果没有找到正好 1 个结果,就会故意抛出错误。解决方法是使用FirstOrDefaultAsync()FirstOrDefault如果有 1 个结果,则返回 1 个结果;如果有多个结果,则返回第一个结果,或者null如果无法得到任何结果。



查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信