如何在新的mongo C#驱动程序中执行findAll并使其同步

Kar*_*Kar 22 .net c# mongodb mongodb-csharp-2.0 mongodb-.net-driver

我正在使用官方C#驱动程序来执行FindAll并升级到新的驱动程序2.0.FindAll已过时,将替换为Find.我试图转换一个简单的方法,返回一个列表Class1.无法在文档中找到使用POCO的实际示例

var collection = database.GetCollection<ClassA>(Collection.MsgContentColName); return collection.FindAll().ToList();

有人可以帮我转换2.0驱动程序并返回列表而不是任务吗?

i3a*_*non 46

编辑:

他们决定添加回同步支持(尽管异步仍然是IO操作的首选),因此您可以简单地使用:

var list = collection.Find(_ => true).ToList();
Run Code Online (Sandbox Code Playgroud)

原版的:

不要在异步代码上同步阻塞.这对性能有害并且可能导致死锁.

如果要使应用程序保持同步,建议您继续使用旧的同步驱动程序.

在新的v2.0驱动程序中,该async选项应如下所示:

async Task FooAsync()
{
    var list = await collection.Find(_ => true).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)

  • "*可能导致死锁*"它不应该因为MongoDB 2.0驱动程序在`Task`s上调用`ConfigureAwait(false)`而使用await. (2认同)

Xtr*_*tes -19

您可以使用 2.0 驱动程序来实现相同的目的,

var collection = database.GetCollection<ClassA>(Collection.MsgContentColName);
var doc = collection.Find(filter).ToListAsync();
doc.Wait();
return doc.Result;
Run Code Online (Sandbox Code Playgroud)

  • 什么是过滤器?这在任何地方都没有定义或解释。这没有解决问题并且包含未解释/未定义的代码。发帖者想要 FindAll。 (2认同)
  • Filter 是您的 FilterDefinition,如果您没有,只需使用“new BsonDocument()”。OP 没有要求澄清,所以认为他已经弄清楚了。 (2认同)