首页 > 解决方案 > 如何在mongodb Spring boot中的数组内添加数据

问题描述

我想在pricesjson 数组中添加数据。它已经有一个对象,每当我再次运行相同的代码块时,我都想在prices数组中添加下一个数据。

{
    "symbol": "AAPL",
    "prices": [
        {
            "date": "2018-09-22 18:32:08",
            "price": "256.00"
        }//add another data here when I run the same block of code again as another object
    ]
}

POJO是这样的, PastPrice.java

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "symbol",
    "prices"
})
public class PastPrice {

    @Id
    @JsonProperty("symbol")
    private String symbol;
    @JsonProperty("prices")
    private List<Price> prices = null;

    @JsonProperty("symbol")
    public String getSymbol() {
        return symbol;
    }

    @JsonProperty("symbol")
    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    @JsonProperty("prices")
    public List<Price> getPrices() {
        return prices;
    }

    @JsonProperty("prices")
    public void setPrices(List<Price> prices) {
        this.prices = prices;
    }

}

然后,Price.java

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "date",
    "price"
})
public class Price {
    @Id
    @JsonProperty("date")
    private String date;
    @JsonProperty("price")
    private String price;

    @JsonProperty("date")
    public String getDate() {
        return date;
    }

    @JsonProperty("date")
    public void setDate(String date) {
        this.date = date;
    }

    @JsonProperty("price")
    public String getPrice() {
        return price;
    }

    @JsonProperty("price")
    public void setPrice(String price) {
        this.price = price;
    }

}

我将这样的数据保存在控制器中

@GetMapping("/save")
public void getAndSaveStocks() {

        RestTemplate restTemplate = new RestTemplate();
        StockData stockData = restTemplate.getForObject(Constants.API,
                StockData.class);
        List<Company> sl = stockData.getCompanies();   

        PastPrice pastPrice = new PastPrice();
for (Company company : sl) {


                    pastPrice = new PastPrice();
                    List<Price> prices = new ArrayList<>();
                    Price price = new Price();
              price.setDate(CurrentDate.getCurrentTimeWithTimeZone());
                    price.setPrice(company.getLTP());
                    prices.add(price);


                    pastPrice.setSymbol(company.getSymbol());
                    pastPrice.setPrices(prices);
                  }   

    }

任何帮助,将不胜感激。谢谢

标签: javamongodbspring-dataspring-data-mongodbspring-data-rest

解决方案


下面应该工作:

  1. 将标价移出公司循环
  2. 循环后保存过去的价格。

    @GetMapping("/save") 公共无效 getAndSaveStocks() {

    RestTemplate restTemplate = new RestTemplate();
    StockData stockData = restTemplate.getForObject(Constants.API,
            StockData.class);
    List<Company> sl = stockData.getCompanies();
    
    PastPrice pastPrice = new PastPrice();
    List<Price> prices = new ArrayList<>();
    for (Company company : sl) {
        Price price = new Price();
        price.setDate(CurrentDate.getCurrentTimeWithTimeZone());
        price.setPrice(company.getLTP());
        prices.add(price);
    
    }
    
    pastPrice.setSymbol(company.getSymbol());
    pastPrice.setPrices(prices);
    

    }


推荐阅读