Angular 如何更新MongoDB中的单个字段?

Angular 如何更新MongoDB中的单个字段?,angular,mongodb,spring-boot,Angular,Mongodb,Spring Boot,我在我的项目中使用Angular+SpringBoot+MongoDB。我试图只更新一个字段。当我在Postman中尝试它时,所有其他字段都变成null。如何仅更新单个字段 我正在使用Postman进行测试,并希望将来在Angular中使用此函数 数据存储库 package com.indsys.TravBackEnd.repositories; import com.indsys.TravBackEnd.models.DateStorage; import org.springframew

我在我的项目中使用Angular+SpringBoot+MongoDB。我试图只更新一个字段。当我在Postman中尝试它时,所有其他字段都变成
null
。如何仅更新单个字段

我正在使用Postman进行测试,并希望将来在Angular中使用此函数

数据存储库

package com.indsys.TravBackEnd.repositories;

import com.indsys.TravBackEnd.models.DateStorage;

import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
@ComponentScan({"com.indsys.TravBackEnd"})
@EntityScan("com.indsys.TravBackEnd")
public interface DateStorageRepository extends MongoRepository<DateStorage, String> {
}
package com.indsys.TravBackEnd.repositories;
导入com.indsys.TravBackEnd.models.DateStorage;
导入org.springframework.boot.autoconfigure.domain.EntityScan;
导入org.springframework.context.annotation.ComponentScan;
导入org.springframework.data.mongodb.repository.MongoRepository;
导入org.springframework.stereotype.Repository;
@存储库
@组件扫描({“com.indsys.TravBackEnd”})
@EntityScan(“com.indsys.TravBackEnd”)
公共接口DateStorageRepository扩展了MongoRepository{
}
数据存储控制器

package com.indsys.TravBackEnd.controllers;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.indsys.TravBackEnd.exceptions.ResourceNotFoundException;
import com.indsys.TravBackEnd.models.DateStorage;
import com.indsys.TravBackEnd.repositories.DateStorageRepository;

@CrossOrigin("*")
@RestController
@RequestMapping("/api")
public class DateStorageController {
    @Autowired
    private DateStorageRepository dateStorageRepository;

    @GetMapping("/datestorage")
    public List<DateStorage> getAllDateStorages() {
        return dateStorageRepository.findAll();
    }

    @GetMapping("/datestorage/{id}")
    public ResponseEntity<DateStorage> getDateStorageById(@PathVariable(value = "id") String dateStorageId)
            throws ResourceNotFoundException {
        DateStorage dateStorage = dateStorageRepository.findById(dateStorageId)
                .orElseThrow(() -> new ResourceNotFoundException("DateStorage not found for this id :: " + dateStorageId));
        return ResponseEntity.ok().body(dateStorage);
    }

    @PostMapping("/datestorage")
    public DateStorage createDateStorage(@Validated @RequestBody DateStorage dateStorage) {
        return dateStorageRepository.save(dateStorage);
    }

    @PutMapping("/datestorage/{id}")
    public ResponseEntity<DateStorage> updateDateStorage(@PathVariable(value = "id") String dateStorageId,
            @Validated @RequestBody DateStorage dateStorageDetails) throws ResourceNotFoundException {
                DateStorage dateStorage = dateStorageRepository.findById(dateStorageId)
                .orElseThrow(() -> new ResourceNotFoundException("DateStorage not found for this id :: " + dateStorageId));
        dateStorage.setMtransactionID(dateStorageDetails.getMtransactionID());
        dateStorage.setStartDate(dateStorageDetails.getStartDate());
        dateStorage.setEndDate(dateStorageDetails.getEndDate());
        final DateStorage updatedDateStorage = dateStorageRepository.save(dateStorage);
        return ResponseEntity.ok(updatedDateStorage);
    }
    

    @DeleteMapping("/datestorage/{id}")
    public Map<String, Boolean> deleteDateStorage(@PathVariable(value = "id") String dateStorageId)
            throws ResourceNotFoundException {
                DateStorage dateStorage = dateStorageRepository.findById(dateStorageId)
                .orElseThrow(() -> new ResourceNotFoundException("Colours not found for this id :: " + dateStorageId));

        dateStorageRepository.delete(dateStorage);
        Map<String, Boolean> response = new HashMap<>();
        response.put("deleted", Boolean.TRUE);
        return response;
    }


}
 
包com.indsys.TravBackEnd.controllers;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.http.ResponseEntity;
导入org.springframework.validation.annotation.Validated;
导入org.springframework.web.bind.annotation.CrossOrigin;
导入org.springframework.web.bind.annotation.DeleteMapping;
导入org.springframework.web.bind.annotation.GetMapping;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.PostMapping;
导入org.springframework.web.bind.annotation.PutMapping;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RestController;
导入com.indsys.TravBackEnd.exceptions.ResourceNotFoundException;
导入com.indsys.TravBackEnd.models.DateStorage;
导入com.indsys.TravBackEnd.repositories.DateStorageRepository;
@交叉原点(“*”)
@RestController
@请求映射(“/api”)
公共类DateStorageController{
@自动连线
专用DateStorageRepository DateStorageRepository;
@GetMapping(“/datestorage”)
公共列表getAllDateStorages(){
return dateStorageRepository.findAll();
}
@GetMapping(“/datestorage/{id}”)
公共响应属性getDateStorageById(@PathVariable(value=“id”)字符串dateStorageId)
抛出ResourceNotFoundException{
DateStorage DateStorage=dateStorageRepository.findById(dateStorageId)
.orelsetrow(()->new ResourceNotFoundException(“未找到此id的DateStorage::”+dateStorageId));
返回ResponseEntity.ok().body(日期存储);
}
@邮戳(“/datestorage”)
public DateStorage createDateStorage(@Validated@RequestBody-DateStorage-DateStorage){
return dateStorageRepository.save(dateStorage);
}
@PutMapping(“/datestorage/{id}”)
public ResponseEntity UpdateDataStorage(@PathVariable(value=“id”)字符串dateStorageId,
@已验证的@RequestBody DateStorage dateStorageDetails)引发ResourceNotFoundException{
DateStorage DateStorage=dateStorageRepository.findById(dateStorageId)
.orelsetrow(()->new ResourceNotFoundException(“未找到此id的DateStorage::”+dateStorageId));
dateStorage.setMtransactionID(dateStorageDetails.getMtransactionID());
dateStorage.setStartDate(dateStorageDetails.getStartDate());
dateStorage.setEndDate(dateStorageDetails.getEndDate());
最终日期存储updatedDateStorage=dateStorageRepository.save(日期存储);
返回ResponseEntity.ok(updateDateStorage);
}
@DeleteMapping(“/datestorage/{id}”)
公共映射deleteDateStorage(@PathVariable(value=“id”)字符串dateStorageId)
抛出ResourceNotFoundException{
DateStorage DateStorage=dateStorageRepository.findById(dateStorageId)
.orelsetrow(()->new ResourceNotFoundException(“未找到此id的颜色::”+dateStorageId));
dateStorageRepository.delete(dateStorage);
Map response=newhashmap();
response.put(“已删除”,Boolean.TRUE);
返回响应;
}
}

如果您的意思是只想使用UpdatedTestOrage路由更新一个字段(例如,仅更新MTTransactionID),那么我建议您检查所有字段的空值,如下所示:

Optional.ofNullable(dateStorageDetails.getMtransactionID())
            .ifPresent(x -> dateStorage.setMtransactionID(x));

对每个字段执行此操作,然后它将只更新您在postman上输入的字段