簡體   English   中英

從2.0 MongoDb c#驅動程序獲取結果

[英]Getting results from 2.0 MongoDb c# driver

我已經使用1.02.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM