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

时间:2016-04-07 02:29:37

标签: mongodb sails.js waterline

我将用户输入存储到带有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
    }
  }
}

用户将在表单中添加任意数量的这些字段,因此其表单将包含对所选字段类型的引用。在构建表单时,我确切地知道如何根据这些信息处理/显示每个字段,但保存信息有点困难,因为该模型需要为值字段假定一个类型。

' 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.'

时,会出现此问题

对此的任何帮助将不胜感激。

** 编辑 **

我也需要这个值也可以搜索。

1 个答案:

答案 0 :(得分:0)

也许稍微改变一下。并将处理问题的答案视为比价值更复杂的价值。将类型更改为JSON&构建自定义验证器。

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

并使它成为湖泊

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

您现在可以通过搜索来搜索所有回复的扁平类型。基于value.type,您可以为json创建自定义验证规则。