我是mongoDb的新手,并尝试使用mongoDb和Asp.net Core Web API进行CRUD操作。
我的问题是总是整个对象都更新了。我想更新在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”}
但是,所有时间它都会更新完整的对象。我该如何解决?
下面是我的代码:
Controller 代码:
[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设置地址=“my_New_add” WHERE ID =“586e262268d90b290001b46e”
提前致谢。
最佳答案
FindOneAndReplace
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");
}
上面将找到一个名字为Jack的文档,并将其名字字段设置为John。然后它将返回被替换的文档。
请参阅文档here
关于mongodb - mongoDb和asp.net核心中的更新操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41483648/