gpt4 book ai didi

java - Spring-Boot Data MongoDB - 如何为 super 特定对象获取特定嵌套对象

转载 作者:可可西里 更新时间:2023-11-01 10:42:41 31 4
gpt4 key购买 nike

我有以下数据模型,我想在子列表对象中获取特定对象,我知道可以获取整个列表并遍历每个对象并与搜索 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);
}

Controller 类:

@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));
}
}
}

提前致谢!

最佳答案

虽然我自己没有尝试过,但我认为有一种方法可以做到这一点,但也许我可以阐明我将如何做到这一点。

首先,我宁愿使用更灵活的方式通过 MongoTemplate 查询 mongodb。 MongoTemplate 已包含在 Spring Boot Mongodb 数据库中,看起来您已经在使用该库,因此它不是您必须使用的额外库。在 Spring 中,有一种方法可以将您的 MongoTemplate @Autowired 起来,因此可以快速轻松地获取完成此任务的对象。

使用 mongoTemplate,你会做这样的事情:

Query query = new Query();
query.addCriteria(Criteria.where("listVouchers.id").is("1234"));
List<Host> host = mongoTemplate.find(query, Host.class);

请在此处查看文档:https://docs.mongodb.org/manual/tutorial/query-documents/

关于java - Spring-Boot Data MongoDB - 如何为 super 特定对象获取特定嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119296/

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