C# 带筛选器的MongoDb FindAsync游标始终返回null
我使用下面的代码按字段名筛选集合。但是C# 带筛选器的MongoDb FindAsync游标始终返回null,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我使用下面的代码按字段名筛选集合。但是result.Current始终为null,而数据存在于MongoCollection中。有什么想法吗 代码 public async Task<IdentityUser> FindByNameAsync(string userName) { if (string.IsNullOrEmpty(userName)) { throw new Argumen
result.Current
始终为null
,而数据存在于MongoCollection
中。有什么想法吗
代码
public async Task<IdentityUser> FindByNameAsync(string userName)
{
if (string.IsNullOrEmpty(userName))
{
throw new ArgumentException("Null or empty argument: userName");
}
var filter = Builders<IdentityUser>.Filter.Eq("UserName", userName);
var result = await _collection.FindAsync(filter);
if (result != null && result.Current != null && result.Current.Count() == 1)
{
return result.Current.Single();
}
return null;
}
对于简单查询(您的案例),您应该使用下一步:
var user = await collection.Find(x => x.UserName != userName).FirstAsync();
您试图使用游标。当查询可以返回大量数据时,这是有意义的,在这种情况下,游标用于下一种方式:
var cursor = await collection.FindAsync(x => x.UserName != userName);
while (await cursor.MoveNextAsync())
{
var listOfUsers = cursor.Current;
}
PS:Find
-返回结果,FindAsync
-在C#8.0中返回游标,如果方法返回一个IEnumerable
,您可以在while
循环中使用产生返回游标.Current
。更干净和正确的异步。
var cursor = await collection.FindAsync(x => x.UserName != userName);
while (await cursor.MoveNextAsync())
{
var listOfUsers = cursor.Current;
}