gpt4 book ai didi

c# - 带有过滤器的 MongoDb FindAsync 游标总是返回 null

转载 作者:可可西里 更新时间:2023-11-01 09:57:53 26 4
gpt4 key购买 nike

我使用以下代码按字段名称过滤集合。但是 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;
}

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
}

最佳答案

对于简单的查询(你的情况)你应该使用 next:

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# - 带有过滤器的 MongoDb FindAsync 游标总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com