Spring data Mongo Audit 字段反映在嵌套文档中

s1m*_*r3d 5 java audit spring-data spring-data-mongodb spring-repositories

当保存带有嵌套审核文档的审核(@CreatedDate、@LastModifiedDate)文档时,这两个日期也将反映在嵌套文档中。

这是场景:

文件A.java

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

   // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

文件B.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
}
Run Code Online (Sandbox Code Playgroud)

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

use*_*814 0

这就像设计一样工作。

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

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