【发布时间】:2019-02-19 19:19:52
【问题描述】:
我想在 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);
}
然后我有一个控制器,它获取用户 ID 和符号以及数量,现在如果用户已经购买了股票,我想将其添加为 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);
但它会将用户购买的所有股票返回给我,因此我必须遍历它们中的每一个,我认为这不是最佳做法。任何帮助,将不胜感激。谢谢
【问题讨论】:
标签: java mongodb spring-boot spring-data-mongodb