gpt4 book ai didi

c# - 从 2.0 MongoDb c# 驱动程序获取结果

转载 作者:IT老高 更新时间:2023-10-28 13:24:55 25 4
gpt4 key购买 nike

我已经使用 1.02.0 c# 驱动程序为 MongoDb 构建了一个示例应用程序。

它们序列化相同的对象,我可以同时使用这两个对象进行写入并从 1.0.0 中读取。但我无法在 2.0 中使用 FindAsync 给我任何结果。

这是我的 1.0 查询,它返回一个文档:

var results = collection.AsQueryable<FlatCatalogItem>()
.FirstOrDefault(c => c.BatchId == "2015.01.27"
&& c.Upcs.Any(u => u.UPC == "123456803"));

我的 2.0 查询使用与 FindAsync 相同的数据如下所示:

var task = collection.FindAsync(item => item.BatchId == "2015.01.27" 
&& item.Upcs.Any(u => u.UPC == "123456803"));
task.Wait();
var results = task.Result;

从 result 返回的 AsyncCursor 中没有任何内容。

results.MoveNextAsync().Wait(); // results.Current.Count = 0

这可能是我对 async 和 await 的无知,或者我可能错过了 2.0 find 方法的其他内容?请注意,我不想使用 legacy 2.0 drivers

最佳答案

新的 API 是 async-only,你不应该阻止它。它不可扩展,可能会导致死锁。一直使用 async-await 或继续使用旧 API。在 async 方法中,查询应如下所示:

async Task Foo()
{
FlatCatalogItem first = await collection.
Find(c => c.BatchId == "2015.01.27" && c.Upcs.Any(u => u.UPC == "123456803")).
FirstOrDefaultAsync();

// use first
}

关于c# - 从 2.0 MongoDb c# 驱动程序获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29417502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com