繁体   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