Javascript 流星群与子群

Javascript 流星群与子群,javascript,node.js,mongodb,meteor,Javascript,Node.js,Mongodb,Meteor,我在《流星》中有一些小组和项目 每个项目都属于一个组。这些组实际上可以分成两部分,其中一些组属于一个具有更高阶数的组(在层次结构中) 因此,层次结构可以如下所示: Group 1 Subgroup 1 Subgroup 2 Subgroup 3 Group 2 Subgroup 1 Subgroup 2 Group 3 Supgroup 1 项目只能属于子组,而不能属于“主组”。所以我想我可以创建一个只包含子组的集合,然后有一个字段告诉这个子组属

我在《流星》中有一些小组和项目

每个项目都属于一个组。这些组实际上可以分成两部分,其中一些组属于一个具有更高阶数的组(在层次结构中)

因此,层次结构可以如下所示:

Group 1
    Subgroup 1
    Subgroup 2
    Subgroup 3
Group 2
    Subgroup 1
    Subgroup 2
Group 3
    Supgroup 1
项目只能属于子组,而不能属于“主组”。所以我想我可以创建一个只包含子组的集合,然后有一个字段告诉这个子组属于哪个“主组”。但我还需要存储有关“主要组”的附加信息(例如其名称、日期范围等),因此可能更好的解决方案是创建两个集合<代码>主组和
子组
,并且在
中有一个
子ID
字段。但由于这两种类型的组几乎相等,我想我可以创建一个模式结构,其中子组是“主组”的子对象


您通常如何创建此类应用程序的数据结构?理想情况下,将来也可能有嵌套的组。

您需要的是一个类似

简单模式

 AddressSchema = new SimpleSchema({
  street: {
    type: String,
    max: 100
  },
  city: {
    type: String,
    max: 50
  },
  state: {
    type: String,
    regEx: /^A[LKSZRAEP]|C[AOT]$/
  },
  zip: {
    type: String,
    regEx: /^[0-9]{5}$/
  }
});
复合模式

CustomerSchema = new SimpleSchema({
  billingAddress: {
    type: AddressSchema
  },
  shippingAddresses: {
    type: [AddressSchema],
    minCount: 1
  }
});
验证对象的步骤

obj = {title: "Ulysses", author: "James Joyce"};
isValid = BookSchema.namedContext("myContext").validate(obj);

既然你打算有一天拥有一个嵌套的组,那么拥有两个集合(每个级别一个)就没有多大意义,因为你的每一个进一步的爱都需要另一个集合

在传统的Mongo设置中,每个主组的文档中都包含子组。在您的情况下,这可能是一种明智的方法

另一种方法是使用单个组集合,其中每个组都可以有一个父ID作为字段。如果没有父ID,那么您知道它是顶级组。如果您只需要将子组发送到客户端,这种方法非常有用(因为Meteor无法返回子集合的游标,所以您始终需要向下发送保留子文档)

因此,最佳结构取决于您的应用程序以及如何使用数据创建UI


最后,正如另一张海报所指出的,一旦您决定使用该软件包,您就可以使用该软件包来实施模式。

这根本不能回答问题。这是在解释如何实施模式。用户询问为了最好地处理他试图表示的数据,应该实施哪种模式。