Sails / Waterline 模型帮助 - 如何存储可能是数组、json 或字符串的数据?

Sails / Waterline model help - how can I store data that might be an array, json or string?

我使用 Sails / Waterline 将用户输入存储到 MongoDB 中,因为字段类型取决于他们的设置,我发现很难找出存储数据的最佳方式。

'surveyField'模型如下:

// SURVEY FORM FIELD DEFINITIONS

module.exports = {
  attributes: {
    name: {
      type: 'string',
      required: true
    },
    label: {
      type: 'string',
      required: true
    },
    constraints: {
      type: 'string',
      enum: ['none', 'unique', 'combo', 'same'],
      required: true,
      defaultsTo: 'none'
    },
    isRequired: {
      type: 'boolean',
      required: true,
      defaultsTo: false
    },
    attributeType: {
      type: 'string',
      enum: ['boolean', 'text', 'localizedText', 'enum', 'localizedEnum', 'number', 'money', 'date', 'time', 'dateTime'],
      required: true
    }
  }
}

用户将在他们的表单中添加任意数量的这些字段,因此他们的表单将包含对他们选择的字段类型的引用。构建表单时,我确切地知道如何 handle/display 基于此信息的每个字段,但事实证明保存信息有些困难,因为该模型需要为值字段假定一种类型。

'surveyData'模型看起来像:

module.exports = {
  attributes: {
    value: {
      **type: 'string' // THIS IS WHERE THE ISSUE IS**
    },
    surveyFieldType: {
      model: 'surveyFieldType',
      required: true
    },
    survey: {
      model: 'survey',
      required: true
    },
    user: {
      model: 'user',
      required: true
    }
  }
}

当值可能是字符串或者可能是 json... 或任何其他 'standard data types.'

时会出现问题

如有任何帮助,我们将不胜感激。

** 编辑 **

我还需要此值也可搜索。

也许稍微改变一下。并将调查答案作为比值更复杂的值来处理。将类型更改为 JSON 并构建自定义验证器。

attributes: {
    value: {
        type: 'json'
    }
}

让它成为那个湖

{
    surveyFieldType: something,
    value: {
        type: 'Array', 
        value: [1,2,3]
    },
    survey: survey,
    user: user
}

您现在可以通过它进行搜索,您已将所有回复的类型扁平化。基于 value.type,您可以为 json.

创建自定义验证规则