我是mongoDb的新手,并尝试使用mongoDb和Asp.net Core web api进行CRUD操作。 我的问题是altime整个对象变得更新。我想更新我在web api中发送的特定字段。
示例:
BusinessUnit oBU = new BusinessUnit(){
Id = "586e262268d90b290001b46e",
Name = "BU_Name",
Address = "my_Add"
};
现在我想只将地址更新为“my_New_add”,并想在下面找到对象:
BusinessUnit oBU = new BusinessUnit(){
Id = "586e262268d90b290001b46e",
Name = "BU_Name",
Address = "my_New_Add"
};
API致电:http://localhost:88786/api/BusinessUnit/586e262268d90b290001b46e
正文:{“Id”:“586e262268d90b290001b46e”,“地址”:“my_New_add”}
但是它一直都会更新完整的对象。我该如何解决?
以下是我的代码:
控制器代码:
[HttpPut("{id}")]
public void Put(string id, [FromBody]BusinessUnit businessUnit)
{
_businessUnitRepository.UpdateBusinessUnit(id, businessUnit);
}
存储库代码:
public async Task<ReplaceOneResult> UpdateBusinessUnit(string id, BusinessUnit businessUnit)
{
return await _context.BusinessUnits.ReplaceOneAsync(doc => doc.Id == id, businessUnit);
}
其实我想在下面查询(我知道mongodb是noSql,但为了让我的问题清楚,我写下面的sql查询)
UPDATE BusinessUnit Set Address =“my_New_add”WHERE Id =“586e262268d90b290001b46e”
提前致谢。
答案 0 :(得分:2)
<强> FindOneAndReplace 强>
单个文档可以使用原子替换
FindOneAndReplace
或FindOneAndReplaceAsync
方法。
var filter = new BsonDocument("FirstName", "Jack");
var update = Builders<BsonDocument>.Update.Set("FirstName", "John");
var result = collection.FindOneAndUpdate(filter, update);
if (result != null)
{
Assert(result["FirstName"] == "Jack");
}
上面将找到FirstName为Jack的文档,并将其FirstName字段设置为John。然后它将返回被替换的文档。
请参阅文档here
答案 1 :(得分:0)
使用此方法:
public ToDoItem Update(ToDoItem toDoItem)
{
yourCollection.ReplaceOne(item => item.Id == toDoItem.Id, toDoItem);
return toDoItem;
}