具有Filter的MongoDb FindAsync Cursor始终返回null

mbh*_*n88 2 c# mongodb mongodb-.net-driver

我使用下面的代码按字段名称过滤集合.但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;
        }
Run Code Online (Sandbox Code Playgroud)

Mongo文件

{
    "_id": {
        "$oid": "558acd1768869a0f6c45ab78"
    },
    "CreatedBy": 0,
    "UpdatedBy": 0,
    "CreatedTime": {
        "$date": "2015-06-24T15:30:28.336Z"
    },
    "UpdatedTime": {
        "$date": "0001-01-03T00:00:00.000Z"
    },
    "UserName": "test",
    "Email": null,
    "EmailConfirmed": false,
    "PasswordHash": "test",
    "SecurityStamp": null,
    "PhoneNumber": null,
    "PhoneNumberConfirmed": false,
    "TwoFactorEnabled": false,
    "LockoutEndDateUtc": null,
    "LockoutEnabled": false,
    "AccessFailedCount": 0
}
Run Code Online (Sandbox Code Playgroud)

rno*_*nko 6

对于简单查询(您的情况),您应该使用下一个:

var user = await collection.Find(x => x.UserName != userName).FirstAsync();
Run Code Online (Sandbox Code Playgroud)

你试图使用光标.当查询可以返回大量数据时,这是有意义的,在这种情况下,游标将在下一个方式使用:

var cursor = await collection.FindAsync(x => x.UserName != userName);
while (await cursor.MoveNextAsync())
{
      var listOfUsers = cursor.Current;
}
Run Code Online (Sandbox Code Playgroud)

PS:Find- 返回结果,FindAsync- 返回光标