簡體   English   中英

如何在Web Api補丁請求中部分更新mongodb文檔

[英]How to partial update mongodb document in Web Api Patch request

我想部分更新在補丁請求中更改的文檔字段,並且在每個請求中該字段可能已更改

注意:IDto 接口中沒有任何內容,我只是用它來將 Dtos 與其他類分開。

UpdateAccountDto.cs文件

public class UpdateAccountDto : IDto
{
    public string Id { get; set; } = string.Empty;
    public string AccountId { get; set; } = string.Empty;

    public string AccountHolder { get; set; } = string.Empty;

    public string AccountType { get; set; } = string.Empty;

    public decimal Balance { get; set; }
}

Account.cs 我的實體

public class Account
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; } = string.Empty;
    [BsonElement("account_id")] 
    public string AccountId { get; set; } = string.Empty;

    [BsonElement("account_holder")]
    public string AccountHolder { get; set; } = string.Empty;

    [BsonElement("account_type")]
    public string AccountType { get; set; } = string.Empty;
    
    [BsonRepresentation(BsonType.Decimal128)]
    [BsonElement("balance")]
    public decimal Balance { get; set; }

}

我的終點

        [HttpPatch("UpdatePartialAccount")]
        public async Task<ActionResult> UpdatePartialAccount([FromQuery]string id,[FromBody] JsonPatchDocument<UpdateAccountDto>? document)
        {
            if (document is null)
                return BadRequest();

            var updateAccountDto = document.ToDto();

            document.ApplyTo(updateAccountDto, ModelState);

            if (!ModelState.IsValid)
                return BadRequest();

            var entity = updateAccountDto.ToEntity<Account>();
            entity.Id = id;

            await _accountRepository.PartialUpdateAsync(entity);

            return NoContent();

        }

PartialUpdateAsync 方法

   public async Task<UpdateResult> PartialUpdateAsync(Account account)
    {
        //var filter = Builders<Account>.Filter.Eq(a => a.Id, account.Id);
        //var update = Builders<Account>.Update.Set()
        //Partial update

        
    }

你的問題其實不是很清楚,但我猜你可能想知道JsonPatchDocument對應的字段設置和更新Mongodb數據庫的操作。

關於JsonPatchDocument的字段設置,可以參考官方文檔使用。 例如:

[HttpPatch("UpdatePartialAccount")]
        public async Task<ActionResult> UpdatePartialAccount([FromQuery] string id, [FromBody] JsonPatchDocument<UpdateAccountDto>? document)
{
    if (document is null)
        return BadRequest();

    var dto = new UpdateAccountDto() { AccountId = "DAccount1" };

    document.ApplyTo(dto, ModelState);
    //.....
}

假設您對其執行替換操作:

[
  {
    "operationType": 2,
    "path": "/accountHolder",
    "op": "replace",
    "value": "TestHolder"
  }
]

此時你的dto將變成:

在此處輸入圖像描述

請確認dto的內容,然后與 Account 匹配以更新數據庫(我不知道你是如何將 map 轉換為Account ,但我使用了AutoMapper )。 例如:

public async Task UpdateAsync(Account account)
{
    await _account.UpdateOneAsync(c => c.AccountId == account.AccountId, account.AccountHolder);
}

有關更新數據庫的更多操作,您可以查看此鏈接

希望這可以幫到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM