在保存带有嵌套审核文档的审核(@ 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设置的db中。然后,当使用嵌套DocumentA保存新DocumentB时,嵌套DocumentA的2个日期将被修改为刚为DocumentB设置的相同值。这仅在嵌套文档中发生,而未触及存储的DocumentA(幸运的是!)。 预期的行为是,嵌套文档将仅通过代码设置完全相同(这意味着与原始文档A相同)
答案 0 :(得分:0)
这就像设计一样工作。
嵌入文档A与引用文档A不同。将文档作为主文档的一部分进行管理意味着将跟踪所有更改,因为它们是文档B中的顶级字段。对引用的文档进行跟踪和管理
如果仅引用,则应该使用手动引用,并使用单独的调用或使用$ lookup聚合查询进行加载。其他选择是使用dbref使驱动程序在加载主文档时加载引用的文档。