是否可以将多种类型的对象存储到1个mongodb集合中?

是否可以将多种类型的对象存储到1个mongodb集合中?,mongodb,morphia,document-oriented-db,Mongodb,Morphia,Document Oriented Db,使用文档索引数据库mongodb和对象文档映射器(ODM)morphia 假设我们有3个不同的班级对象,类别和动作 这些对象都存储在集合中;对象、类别和动作 类别和动作是对象 @Entity("objects") public class Object { @Id @Property("id") private ObjectId id; @Reference private Category category; private Action a

使用文档索引数据库mongodb和对象文档映射器(ODM)morphia

假设我们有3个不同的班级<代码>对象,
类别
动作

这些对象都存储在集合中;对象、类别和动作

类别
动作
对象

@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;
    ...
}
具有当前实现的文档存储方式如下:

  • Mongo(服务器/位置)
    • 存储(数据库)
      • 对象(集合)
        • 对象(文档)
        • 反对
        • 反对
      • 类别
        • 分类
        • 分类
        • 分类
      • 行动
        • 行动
        • 行动
        • 行动
是否可以在一个集合中存储两个不同的对象,在本例中是
类别
操作
,如下一个示例所示?都有自己的身份证明

  • 蒙戈
    • 贮藏
      • 物体
        • 反对
        • 反对
        • 反对
      • 设置
        • 分类
        • 分类
        • 分类
        • 行动
        • 行动
        • 行动

  • 是的。但您可能需要在任何文档中添加字段“documentType”来区分文档。当然,可以在单个集合中存储多种类型的文档。事实上,这是像Mongo这样的面向文档数据库的优势之一。但是,您可能不希望在不考虑某些问题(积极和消极)的情况下将它们结合起来:

  • 不能执行交叉收集或文档SQL连接。因此,在一个或多个集合中拥有文档不会改变这种行为
  • 您只能在单个集合中使用聚合,因此,如果集合具有多个文档类型,而不是跨集合拆分,则可以更方便地执行某些聚合样式查询(聚合框架和Map Reduce一次仅对单个集合进行操作)
  • 为了将文档反序列化为Morphia中的对象,您需要知道给定文档所代表的类型。您可能需要向文档中添加一个字段来指示类型,除非有其他方法可以安全地表示文档的类型,以便反序列化过程正常工作。例如,
    操作
    不能是
    类别
    。如果执行了与
    FindAll
    等效的操作,并且存在多个文档类型,除非反序列化程序可以在反序列化开始之前评估文档结构,否则代码可能无法按预期工作
  • 您可能需要为文档/对象的各种属性编制索引。如果您根据文档类型编制索引(假设
    Action
    有一个从
    Category
    中取消查询的索引,则插入到包含这两个索引的集合中的所有文档都将针对集合中定义的所有索引运行索引器。这可能会影响性能,具体取决于索引的性质。这意味着,集合中的所有文档都将以这通常是一个令人信服的理由,可以组合多个不具有共同索引特征的文档类型
  • 除非您需要执行特定类型的查询,要求所有文档都位于一个公共集合中,否则我可能会将它们保留在单独的集合中,特别是如果您计划对各种文档类型/模式使用自定义索引的话