SpringDataMongo:在mongo集合中搜索派生类字段

时间:2018-07-30 14:39:14

标签: spring mongodb spring-boot inheritance spring-data-mongodb

假设我们有以下模型,

基类

class Meeting
{
  String title;
}

第一个派生类

class OfficialMeeting extends Meeting
{
 int numberOfParticipants;
 String meetingRoomName;
}

第二个派生类

class Party extends Meeting
{
 String theme;
}

组成

class Schedule
{
 List<Meeting> meetings;
}

当我尝试搜索主题为“海滩派对”的集合“时间表”时,Spring数据mongo出错,提示“会议”没有名为主题的字段。

请在此处提出有关模型设计或搜索mongo集合的解决方案。

1 个答案:

答案 0 :(得分:0)

是的,当然应该这样说。您的Meeting类是父类,在运行时无法检测到是Party还是Official Meeting。 Spring Mongo没有操作符的“实例”。对于您的情况,如果您的收藏集同时包含“派对”文档格式和“官方会议”文档格式,则应检查“主题”值是否存在(或检查是否为空,取决于您的数据),以指定其所属的类型以及从中可以使用的类型。查询正确的类型。但是无论如何,以我的经验,我建议您不要使用不必要的文档格式,尽管它是NoSQL。您可以随时添加或删除某些属性,例如“元数据”或数组项,但是某些可以确定文档类型的属性则不应。