在mongoDb和asp.net核心中更新操作

时间:2017-01-05 11:16:31

标签: mongodb asp.net-core

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

<强> FindOneAndReplace

  

单个文档可以使用原子替换   FindOneAndReplaceFindOneAndReplaceAsync方法。

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;
 }