我有以下数据模型,我想在子列表对象中获取一个特定对象,我知道可以获取整个列表并浏览每个对象并与搜索ID进行比较,但我想知道是否有可能使用MongoRepository
来做到这一点。
@Document
public class Host {
@Id
private String id;
@NotNull
private String name;
@DBRef
private List<Vouchers> listVoucher;
public Host() {
}
//Getters and Setters
}
和..
@Document
public class Vouchers {
@Id
private String id;
@NotNull
private int codeId;
public Vouchers() {
}
//Getters and Setters
}
存储库类:
public interface HostRepository extends MongoRepository<Host, String> {
List<Host> findAll();
Host findById(String id);
Host findByName(String name);
//How to build the correct query ??????????
List<Vouchers> findVouchersAll();
Vouchers findByVouchersById(String hostId, String voucherId);
}
控制器类:
@RestController
@RequestMapping(value = "api/v1/host")
public class VoucherController {
@Inject
HostRepository hostRepository;
@RequestMapping(value = "/{hostId}/voucher",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<Vouchers> list() {
return hostRepository.findVouchersAll();
}
@RequestMapping(value = "/{hostId}/voucher/{voucherId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Vouchers getOneVoucher(@PathVariable String hostId, @PathVariable String voucherId) {
Vouchers voucher = hostRepository.findByVouchersById(hostId, voucherId);
if (voucher != null) {
return voucher;
} else {
throw new VoucherNotFoundException(String.format("There is no voucher with id=%s", voucherId));
}
}
}
提前致谢!
答案 0 :(得分:1)
我认为有一种方法可以做到这一点,虽然我自己没有尝试过,但也许我可以解释一下如何做到这一点。
首先,我宁愿使用更灵活的方法来使用MongoTemplate查询mongodb。 MongoTemplate已包含在Spring Boot Mongodb数据库中,看起来您已经在使用该库,因此它不是您必须使用的附加库。在Spring中有一种方法可以@Autowired你的MongoTemplate,因此可以快速轻松地获得完成此任务的对象。
使用mongoTemplate,您可以执行以下操作:
@media screen and (min-width: 480px) {
body {
/*CODE GOES HERE*/
}
}
请参阅此处的文档:https://docs.mongodb.org/manual/tutorial/query-documents/