嵌套文档中反映的Spring数据Mongo-Audit字段



使用嵌套的已审核文档保存已审核(@CreatedDate,@LastModifiedDate(文档时,这两个日期也将反映在嵌套文档中。

这就是场景:

DocumentA.java

public class DocumentA {
@Id
private String id;
@Version
private Long version;
@CreatedDate
private Long createdDate;
@LastModifiedDate
private Long lastModifiedDate;
// getters and setters
}

DocumentB.java

public class DocumentB {
@Id
private String id;
@Version
private Long version;
@CreatedDate
private Long createdDate;
@LastModifiedDate
private Long lastModifiedDate;

private DocumentA docA;
// getters and setters
}

DocumentA已存储在数据库中,并设置了createdDate和lastModifiedDate。然后,当使用嵌套DocumentA保存新DocumentB时,嵌套DocumentA的2个日期将被修改为与刚刚为DocumentB设置的值相同的值。这种情况只发生在嵌套文档中,而存储的DocumentA没有被触摸(幸运的是!(预期的行为是嵌套文档将保持完全相同,只是通过代码设置(这意味着与原始文档A相同(

这就像设计一样。

嵌入文档A与引用文档A不同。嵌入文档作为主文档的一部分进行管理意味着所有更改都将被跟踪,因为它们是文档B中的顶级字段。引用文档时,它将被单独跟踪和管理。

如果您只引用,您应该使用手动引用,并使用单独的调用或使用$lookup聚合查询加载。另一种选择是使用dbref让驱动程序在加载主文档时加载引用的文档。

最新更新