使用嵌套的已审核文档保存已审核(@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让驱动程序在加载主文档时加载引用的文档。