使用文档oriënted数据库mongodb和对象文档映射器(ODM)morphia
假设我们有3个不同的班级; Object
,Category
和Action
这些对象都存储在集合中;对象,类别和动作。
Category
和Action
是Object
@Entity("objects")
public class Object {
@Id
@Property("id")
private ObjectId id;
@Reference
private Category category;
private Action action;
...
}
@Entity("categories")
public class Category {
@Id
public String categoryTLA;
public String categoryName;
...
}
@Entity("actions")
public class Action implements BaseEntity {
@Id
public String action;
public int accesLevel;
...
}
具有当前实现的文档存储如下:
是否可以在一个集合中存储2个不同的对象,在本例中为Category
和Action
,如下一个示例所示?两者都有自己的身份!
答案 0 :(得分:9)
当然,可以在一个集合中存储多种类型的文档。事实上,这是像Mongo这样的面向文档的数据库的优势之一。但是,您可能不想在不考虑某些问题(正面和负面)的情况下将它们组合在一起:
Action
不能是Category
。如果您执行了等效的FindAll
并且有多种文档类型,除非反序列化程序可以在反序列化开始之前评估文档结构,否则您的代码可能无法正常工作。Action
的索引与Category
不一致,那么插入到包含两者的集合中的所有文档都将通过索引器运行,用于集合中定义的所有索引。可以影响性能,具体取决于索引的性质。这意味着无论索引是否有意义,集合中的所有文档都将被编入索引。这通常是不组合多个文档类型的一个令人信服的理由不要分享共同的索引特征。除非您需要执行要求所有文档都在公共集合中的特定类型的查询,否则我可能会将它们保留在单独的集合中,尤其是如果您计划对各种文档类型/模式使用自定义索引。
答案 1 :(得分:1)
是肯定的。但可能需要在任何文档中添加字段“documentType”以区分文档