如何使用@Query -> Spring data mongo 从@DBRef 文档获取数据
How can I get data from @DBRef document using @Query -> Spring data mongo
我需要帮助从另一个文档中获取数据我有以下 class。
@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
.
这不能像您在存储库中那样使用方法来实现。您需要使用投影。 Here 是相关文档。
像这样创建一个投影接口。在这里您可以控制您需要在 Main class(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
并控制需要返回 subclass 中的哪些字段。
public interface TaApplicationVersionRepository extends MongoRepository<TaApplicationVersion, String> {
TaApplicationVersion findById(String id);
}
我需要帮助从另一个文档中获取数据我有以下 class。
@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
.这不能像您在存储库中那样使用方法来实现。您需要使用投影。 Here 是相关文档。
中包含哪些字段
像这样创建一个投影接口。在这里您可以控制您需要在 Main class(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
并控制需要返回 subclass 中的哪些字段。
public interface TaApplicationVersionRepository extends MongoRepository<TaApplicationVersion, String> {
TaApplicationVersion findById(String id);
}