gpt4 book ai didi

java - 如何使用 MongoDB 存储库在 Spring Boot 中通过 ID 以外的其他内容进行搜索

转载 作者:行者123 更新时间:2023-12-02 01:37:55 24 4
gpt4 key购买 nike

我正在制作一个应用程序,我想通过名称搜索城市。我从中提取信息的数据库是一个 MongoDB 数据库,具有 id、城市、位置、人口和州属性。我有以下实体:

 public class Cities {
@Id
private String _id;
private String city;
private String[] loc;
private String pop;
private String state;

public String get_id() {
return _id;
}

public void set_id(String _id) {
this._id = _id;
}

String getLocation() {
return loc[0] + " " + loc[1];
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String[] getLoc() {
return loc;
}

public void setLoc(String[] loc) {
this.loc = loc;
}

public String getPop() {
return pop;
}

public void setPop(String pop) {
this.pop = pop;
}

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

@Override
public String toString() {
return "Cities{" +
"_id='" + _id + '\'' +
", city='" + city + '\'' +
", loc=" + Arrays.toString(loc) +
", pop='" + pop + '\'' +
", state='" + state + '\'' +
'}';
}
}

我的 Controller 如下所示:

import com.sbmongo.starbucks.Constant.ViewConstant;
import com.sbmongo.starbucks.Entity.Cities;
import com.sbmongo.starbucks.Repository.CitiesRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/starbucks")
public class CitiesController {

@Autowired
@Qualifier("citiesRepository")
private CitiesRepository citiesRepository;

@GetMapping("/cities")
public ModelAndView listCities(){
ModelAndView mav = new ModelAndView(ViewConstant.CITIES);
mav.addObject("cities", citiesRepository.findAll());
return mav;
}

@GetMapping("/searchCity")
public ModelAndView searchCity(@RequestParam(name = "city", required = false)String city){
ModelAndView mav = new ModelAndView(ViewConstant.CITIES);
mav.addObject("cities", citiesRepository.findByCity(city));
return mav;
}
}

我的存储库:

import java.util.List;

@Repository("citiesRepository")
public interface CitiesRepository extends MongoRepository<Cities, String> {
public Cities findBy_id(ObjectId _id);
public Cities findByCity(String city);
}

以及我使用 Thymeleaf 的 HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">
<title>Starbucks</title>
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col">
<table class="table">
<thead>
<tr>
<th>Id</th>
<th>City</th>
<th>Location</th>
<th>Population</th>
<th>State</th>
</tr>
</thead>
<tbody>
<tr th:each="city : ${cities}">
<td th:text="${city._id}"></td>
<td th:text="${city.city}"></td>
<td th:text="${#strings.arrayJoin(city.loc, ' ')}"></td>
<td th:text="${city.pop}"></td>
<td th:text="${city.state}"></td>
</tr>
</tbody>
</table>
</div>
</div>

</div>


<script src="../js/jquery-3.3.1.min.js"></script>
<script src="../js/popper.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
</body>
</html>

我想按城市的名字搜索城市,我从 View 发送城市的名称并在 Controller 中接收它,但看起来存储库中的 findByCity() 方法不起作用。我该如何解决这个问题?

最佳答案

findByCity() 应返回一个列表尝试:

 public List<Cities> findByCity(String city);

关于java - 如何使用 MongoDB 存储库在 Spring Boot 中通过 ID 以外的其他内容进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54951101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com