[英]Getting results from 2.0 MongoDb c# driver
我已經使用1.0和2.0 c#驅動程序為MongoDb構建了一個示例應用程序。
它們序列化相同的對象,我可以用兩者寫入並從1.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"));
使用與FindAsync
相同的數據的我的2.0查詢如下所示:
var task = collection.FindAsync(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803"));
task.Wait();
var results = task.Result;
從結果返回的AsyncCursor
中沒有任何內容。
results.MoveNextAsync().Wait(); // results.Current.Count = 0
這可能是我對異步和等待的無知,或者我可能錯過了2.0查找方法的其他東西? 請注意,我不想使用舊版2.0驅動程序
新的API是async
- 你不應該阻止它。 它不可擴展,可能導致死鎖。 使用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 task = collection.Find(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803")).FirstOrDefaultAsync();
task.Wait();
var results = task.Result;
我也試圖習慣新的API。
或者更優雅一點:
var result = collection.Find(item => item.BatchId == "2015.01.27"
&& item.Upcs.Any(u => u.UPC == "123456803"))
.FirstOrDefaultAsync().Result;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.