我是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/

10-16 13:58
查看更多