【发布时间】:2017-01-05 19:39:42
【问题描述】:
在我们的应用程序中,我们有一个链接到 mongoDB 数据库的用户模型。我的问题是关于仅修改给定用户数据中键/值对中的值(当然使用用户 ID)。
这是我的简单模型:
public class User
{
[BsonId]
public string Id { get; set; }
public string email { get; set; } = string.Empty;
public bool hasAcceptedTerms { get; set; } = false;
public int state { get; set; } = 0;
public int UserId { get; set; } = 0;
public IList<UserFile> SubmittedFiles { get; set; }
}
public class UserFile
{
public int fileID { get; set; }
public bool hasFile { get; set; }
}
在我们的应用程序中,第一次验证用户身份后,我们使用以下方法在 Mongo 数据库中创建他的条目
public async Task AddUser(User item)
{
await _context.Users.InsertOneAsync(item);
}
在他第一次登录后,我们希望更新他接受条款的事实:通过这样做,我们希望将 hasAcceptedTerms 更改为 true 并将 state 键从 0 移动到 1。
目前在我们的存储库中,我们有类似的内容:
public async Task<UpdateResult> UpdateUser(string id, User item)
{
return await _context.Users
.ReplaceOneAsync(n => n.Id.Equals(id)
, item
, new UpdateOptions { IsUpsert = true });
}
但是这样做我们必须提供与我们的模型相对应的完整项目。
我没有找到任何方法来创建我可以使用的函数:
UdateUserData(string id, string data, bool newvalue);
例如,调用 UpdateUserData('user1objectidhash', 'hasAcceptedTerms', true) 将修改由其 ObjectID Id 标识的用户的正确值。
- 第一个问题:将
data输入为string是一个好主意/独特的解决方案吗?我发现将数据键输入为字符串时我的函数调用并不优雅。李> - 第二个:我不知道 newvalue 的类型是什么,因为它取决于我要修改的数据是什么。我可以从模型中检测到它吗?
- 3rd:我不知道可以处理此更新的正确 Mongo.Driver 函数。
您能给我一些提示和提示吗?
【问题讨论】:
-
使用搜索功能怎么样?就在几个小时前,完全相同的问题得到了回答
标签: c# mongodb asp.net-core mongodb-.net-driver