Spring-Boot数据MongoDB - 如何获取超级特定对象的特定嵌套对象

时间:2015-12-06 15:45:39

标签: java mongodb spring-boot

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

提前致谢!

1 个答案:

答案 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/