Spring Data MongoDB“_class”设计模式不好

时间:2012-08-18 10:50:21

标签: java mongodb spring-data

我遇到Spring Data MongoDB项目的问题。我的问题是所有收集记录中的_class属性。我的用户集合大小接近130万条记录。所有记录都具有_class属性。这是项目的问题和糟糕的设计。因为MongoDB是一个基于文档的系统。大小是集合中每条记录的问题。用户收藏:

{ "_class" : "com.myproject.xxx.yy.aaa.bb.User", … }

如果我想将User类移动到另一个包怎么办?为什么Spring Data会为所有记录添加_class属性?

2 个答案:

答案 0 :(得分:17)

如果你正在抨击你寻求建议的项目,我不知道是什么导致你提出建议的机会。除此之外,在使用软件库时,您可能希望假设已经考虑了实现细节,并且它们是出于某种原因的方式。

如果你花时间考虑阅读参考文档,你会发现section解释了为什么_class属性一般存在以及如何调整所写的值,如何自定义密钥甚至关闭所写的类型信息。

在阅读完这些内容后,您现在可以依次再次编写完美的软件。谢谢!

PS:我花了一些时间来改进你设计糟糕的提问方式。 ;)

答案 1 :(得分:1)

对于最近访问此内容的人,请查看 @TypeAlias 批注,该批注允许您声明将放入 _class 中的值,因此可以使用较小的值。

这也应该部分回答@Eric2201 上面的问题,他在那里询问了不同的类型属性。我不确定具有不同且因此不一致的属性是否是个好主意,我对 _class 感到满意。您当然可以向文档添加任何您想要的字段。

这里没有人问过它,但仅供参考,您可以在同一集合中混合类型以完成此操作。如果您想根据类型限制文档搜索,即使 MongoTemplate 在“查找”方法中要求类型,它也不会在 Spring Mongo 中自动发生;您已将 _class 添加到查询中。