流星集合以及何时使用模式

Meteor Collections and when to use a schema

我开始构建一个应用程序并有一个用于创建宠物的集合 post。

注意:我使用以下包来构建我的集合模式,简单模式 https://atmospherejs.com/aldeed/simple-schema

我用来将数据插入此特定集合的页面有一个部分,该部分基于用户所做的选择,他们会看到更多选项。

例如专注于一个问题有一些复选框,默认情况下 none 被选中,但如果用户选择任何复选框,他们将获得更多选项以通过复选框或文本区域进行选择。关键是他们将根据自己的选择有额外的选择。

我认为处理数据插入方式的最佳方式是通过特定部分的模板助手,所以这不是问题所在。

相反,我感到困惑的是集合级别以及如何架构该信息,或者如果我需要的话。

例如,假设您有一个涉及宠物的问题。

问题可以是:你养宠物吗?

复选框选项可以是:

  1. 其他

默认情况下,所有这些复选框都未选中,但如果用户选中任何一个框,则会显示一个文本区域(我再次意识到所有这些都发生在 Template.events 和 Template.helpers 级别).

我真正的问题是,现在我已经设置了场景,你如何存储这样的信息或将其架构以允许这些类型的值。

假设所有获取此数据的函数都在 Template.helpers 级别,那么这是一个关于如何在这种情况下存储各种数据的简单问题。

我的想法是做这样的事情(使用 simpleSchema 包):

Pet = new SimpleSchema({
 petInstructions: {
  type: String,
  optional: true,
  allowedValues: ['Dogs', 'Cats', 'Other']    
 }
});

但是我不确定这是否正确让我再次重申我确实希望复选框具有值 'Dogs'、'Cats'、'Other' 和文本选中其中任何一项时的区域,以便最终用户可以输入有关其宠物的更多信息。

我不清楚的是,我是否在考虑这些数据的架构可能是什么,或者这种信息应该如何存储在 MongoDB。

我觉得 TextArea 输入也应该有一个 属性,这是一个考虑它的好方法吗?

例如(添加到上面的例子):

Pet = new SimpleSchema({
     petInstructions: {
      type: String,
      optional: true,
      allowedValues: ['Dogs', 'Cats', 'Other'],
      textArea: ""
     }
    });

我应该为该特定内容留下另一个 property/value 吗?

这是一个细粒度的问题,理解像这样简单的问题将有助于澄清我的其他问题。

谢谢。

这就是我的结构。这是关于如何根据另一个字段验证一个字段以及如何有条件地要求一个值的自动表单说明 - https://github.com/aldeed/meteor-simple-schema#best-practice-code-examples

Pet = new SimpleSchema({
  pet: {
    type: Object,
    optional: true
  },
  "pet.type": {
    type: String,
    optional: true,
    allowedValues: ['Dogs', 'Cats', 'Other']
  },
  "pet.instructions": {
    type: String,
    optional: true,
    custom: function(){
        var petType = this.field('pet.type').value;
        // if the user selects a pet type then instructions should be required
        if (petType){
            return "required";
        };
    }
  }
});

在您的旧代码中:

Pet = new SimpleSchema({
     petInstructions: {
      type: String,
      optional: true,
      allowedValues: ['Dogs', 'Cats', 'Other'],
      textArea: ""
     }
    });

您的字面意思是,对于 petInstructions 键,您只允许值是 Dogs、Cats 或 Other,但您还希望其中一个键是带有其他数据的 textArea,这没有太大意义。 SimpleSchema 希望您为 each 键定义一个特定的数据点。