Я хочу сохранить документ в MongoDb в формате json, как этот
{
"userId": "5b89411a161aef03a2ac6847",
"stocks": [
{
"symbol": "aapl",
"company": "Apple Inc",
"group": [
{
"quantity": 110,
"date": "2018-09-02 14:33:51",
"price": "215.00",
"type": "SEC"
}
]
}
]
}
У меня есть такая настройка mongoRepository
public interface UserBuyingRepository extends MongoRepository<BoughtStocks, String>{
BoughtStocks findByUserId(String userId);
}
Тогда у меня есть контроллер, который получает идентификатор пользователя и символ, а также количество, и теперь, если пользователь уже купил акцию, я хотел бы добавить его в качестве следующего элемента в group
, и если он не купил акцию Я хотел бы добавить его в качестве следующего пункта в stocks
. Мой контроллер выглядит так, и я застрял здесь.
@GetMapping("/buy/{symbol}/{quantity}")
public String userBuyingStock(@PathVariable("userID") String userId,
@PathVariable(value = "symbol") String symbol, @PathVariable(value = "quantity") int quantity) {
BoughtStocks boughtStocks = userBuyingRepo.findByUserId(userId);
String date = "2018-9-23"
if(boughtStocks == null){
Group group = new Group();
group.setDate(date);
group.setPrice(213);
group.setQuantity(quantity);
group.setType("SEC");
List<Group> groupList = new ArrayList<>();
groupList.add(group);
Stock stock = new Stock();
stock.setSymbol(symbol);
stock.setCompany("Apple Inc");
stock.setGroup(groupList);
List<Stock> stockList = new ArrayList<>();
stockList.add(stock);
boughtStocks = new BoughtStocks();
boughtStocks.setUserId(applicationUser.getId());
boughtStocks.setStocks(stockList);
}else{
Group group = new Group();
group.setDate(date);
group.setPrice(213);
group.setQuantity(quantity);
group.setType("SEC");
List<Group> groupList = new ArrayList<>();
groupList.add(group);
Stock stock = new Stock();
stock.setSymbol(symbol);
stock.setCompany("Apple Inc");
stock.setGroup(groupList);
boughtStocks.getStocks().add(stock);
}
userBuyingRepo.save(boughtStocks);
return company.getCompanyName();
}
Мои модели такие
BoughtStocks.java
public class BoughtStocks {
@Id
private String userId;
private List<Stock> stocks = null;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public List<Stock> getStocks() {
return stocks;
}
public void setStocks(List<Stock> stocks) {
this.stocks = stocks;
}
}
Stock.java
public class Stock {
@Id
private String symbol;
private String company;
private List<Group> group = null;
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public List<Group> getGroup() {
return group;
}
public void setGroup(List<Group> group) {
this.group = group;
}
}
Groups.java
public class Group {
private Integer quantity;
private String date;
private String price;
private String type;
public Integer getQuantity() {
return quantity;
}
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
Я упускаю основную концепцию здесь. Я пытался использовать это
@Query(value = "{'userId':'?0','stocks.symbol':'?1'}",fields = "{'stocks.symbol':'?1'}")
List<Stock> findByStockSymbol(String userId,String symbol);
Но он возвращает мне все акции, которые купил пользователь, поэтому я должен просмотреть каждый из них, и я не думаю, что это лучшая практика. Любая помощь будет оценена. Спасибо