从 2.0 MongoDb c# 驱动程序获取结果
Getting results from 2.0 MongoDb c# driver
我已经使用 MongoDb 的 1.0 and 2.0 c# 驱动程序构建了一个示例应用程序。
它们序列化了相同的对象,我可以用这两者进行写入并从 1.0.1 中读取。但是我无法在 2.0 中使用 FindAsync
来给我任何结果。
这是我的 1.0 查询 returns 一个文档:
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 查找方法的其他内容?
请注意,我不想使用 legacy 2.0 drivers
你能试试这个吗?
var task = collection.Find(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803")).FirstOrDefaultAsync();
task.Wait();
var results = task.Result;
我也在努力适应新的 API。
新的 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
}
或者更优雅一点:
var result = collection.Find(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803"))
.FirstOrDefaultAsync().Result;
我已经使用 MongoDb 的 1.0 and 2.0 c# 驱动程序构建了一个示例应用程序。
它们序列化了相同的对象,我可以用这两者进行写入并从 1.0.1 中读取。但是我无法在 2.0 中使用 FindAsync
来给我任何结果。
这是我的 1.0 查询 returns 一个文档:
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 查找方法的其他内容? 请注意,我不想使用 legacy 2.0 drivers
你能试试这个吗?
var task = collection.Find(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803")).FirstOrDefaultAsync();
task.Wait();
var results = task.Result;
我也在努力适应新的 API。
新的 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
}
或者更优雅一点:
var result = collection.Find(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803"))
.FirstOrDefaultAsync().Result;