[英]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.