当保存带有嵌套审计文档的审计(@CreatedDate、@LastModifiedDate)文档时,这两个日期也将反射(reflect)在嵌套文档中。
这是场景:
文档A.java
public class DocumentA {
@Id
private String id;
@Version
private Long version;
@CreatedDate
private Long createdDate;
@LastModifiedDate
private Long lastModifiedDate;
// getters and setters
}
文档B.javapublic 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 已存储在 db 中,并设置了其 createdDate 和 lastModifiedDate。然后,当保存带有嵌套 DocumentA 的新 DocumentB 时,嵌套 DocumentA 的 2 个日期将被修改为刚刚为 DocumentB 设置的相同值。这仅发生在嵌套文档中,而不会触及存储的 DocumentA(幸运的是!)。 预期的行为是嵌套文档将保持与通过代码设置的完全相同(这意味着与原始文档 A 相同)
最佳答案
这就像设计一样工作。
嵌入文档 A 与引用文档 A 不同。嵌入文档作为主文档的一部分进行管理意味着所有更改都被跟踪,因为它们是文档 B 中的顶级字段。引用文档是单独跟踪和管理的。
如果您只是引用,则应该使用手动引用和使用单独调用加载或使用 $lookup 聚合查询。其他替代方法是使用 dbref 让驱动程序在加载主文档时加载引用的文档。
关于java - Spring 数据 Mongo 审计字段反射(reflect)在嵌套文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64459597/