我需要帮助从另一个文档中获取数据,我有以下类。
@Data
@Document(collection = "tmVersion")
public class TmVersion {
@Id
private String id;
private String cVrVersionId;
@DBRef
private TaApplicationVersion taApplicationVersion;
}
和
@Data
@Document(collection = "taApplicationVersion")
public class TaApplicationVersion {
@Id
private String id;
private String dVrAppName;
private String dVrAppCode;
}
这是我的存储库,我在其中映射了我想要显示的内容,但在taApplicationVersion中,我需要显示所有这些对象,以及它是如何完成的?
@Query(value="{}", fields="{'cVrVersionId': 1, 'taApplicationVersion.dVrAppName': 2,
'dVrVersionNumber': 3}")
Page<TmVersion> getAllVersionWithOutFile(Pageable pageable)
这里要提到几件事。
-
如果您想要在表之间进行这种连接,那么您需要重新考虑将Mongodb作为数据库的选择。任何Sql数据库都不会因为表(集合(之间的耦合非常少而蓬勃发展。因此,如果您使用
@DBRef
,它会否定这一点。Mongodb本身并不建议使用@DBRef
。 -
使用存储库中的方法无法实现这一点。你需要使用投影。这是相关文档
创建这样的Porojection接口。在这里,您可以控制哪些字段需要包含在Main类(TmVersion(中@ProjectedPayload public interface TmVersionProjection { @Value("#{@taApplicationVersionRepository.findById(target.taApplicationVersion.id)}") public TaApplicationVersion getTaApplicationVersion(); public String getId(); public String getcVrVersionId(); }
像这样更改TmVersionRepository
public interface TmVersionRepository extends MongoRepository<TmVersion, String> {
@Query(value="{}")
Page<TmVersionProjection> getAllVersionWithOutFile(Pageable pageable);
}
为TaApplicationVersion创建一个新的存储库。您可以在该方法的顶部添加@Query
,并控制需要返回子类中的哪些字段。
public interface TaApplicationVersionRepository extends MongoRepository<TaApplicationVersion, String> {
TaApplicationVersion findById(String id);
}