【问题标题】:Using Array Attribute Type in Sails在 Sails 中使用数组属性类型
【发布时间】:2016-07-24 08:19:06
【问题描述】:

我希望在我的应用程序中使用sails 属性类型“数组”,但我在任何地方都找不到这方面的文档。

我想做以下事情:

module.exports = {
 attributes : {
  images: {
   type: ['string']
  },
  location: {
   type: ['float','float']
  }
 }
}

image 是一个数组,其中包含图像 url 列表,而 location 将包含 2 个浮点数。这会在sail's中工作吗?否则我怎样才能让它工作。 谢谢

PS:我只使用 MongoDB

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    从 Sails 1.0 开始,类型 array 不再受支持。

    不再支持“数组”类型。要在模型中使用此类型,请更改 type 为支持的类型之一,并将columnType 属性设置为列 模型适配器支持的类型,例如{ 类型:'json',列类型:'array' }

    解决方案一

    设置属性来存储图像数组和位置数组...

    module.exports = {
      attributes : {
        images: {
          type: 'json',                           
          columnType: 'array'
        }
        location: {
          type: 'json',
          columnType: 'array'
        }
      }
    }
    

    解决方案二

    更优雅的解决方案是设置一个对象来存储文件名和位置数据

    module.exports = {
      attributes : {
        images: {
          type: 'json'
        }
      }
    }
    

    然后在您的控制器中,您可以将对象属性存储为数组...

    let imageData = {
      filename: ["image1.jpg", "image2.jpg", "image3.jpg"],
      location: [154.123123, 155.3434234, 35.12312312]
    };
    
    Images.create({images:imageData});
    

    将数据存储到 json 对象时的一些问题是,像“image1.jpg,image2.jpg,image3.jpg”这样的字符串将存储在 MongoDb 中,不用担心...... doh。确保在 POST 时您可能需要拆分数据 .split(',')

    【讨论】:

      【解决方案2】:

      sailsjs 提供了一个功能来解决你的问题,你可以试试这个

      module.exports = {
       attributes : {
        images: {
         type: 'string'
        },
        location: {
         type: 'json'
        }
       }
      }
      

      【讨论】:

      • 请为您的回答添加简短的解释,以供未来访问者参考。
      • 我不确定这是如何工作的。 images 属性应该是一个字符串数组,但你只有string。同样从位置的语法来看,这指定它的值可以是 floatfloat
      • 对不起,我只是编辑我的帖子来解决你的问题
      【解决方案3】:

      据我所知,你只能这样指定:

      module.exports = {
          attributes : {
              images: {
                  type: 'array'
              },
              location: {
                  type: 'array'
              }
          }
      }
      

      Sails ORM Attributes

      【讨论】:

      • 不再支持“数组”类型。要在模型中使用此类型,请将 type 更改为受支持的类型之一,并将 columnType 属性设置为模型适配器支持的列类型,例如{类型:'json',columnType:'array'}
      【解决方案4】:

      对于sails 1.0,对于数组,也许您可​​以尝试这种我仅用于共享的方式。 您也可以在更新之前替换并处理本机查询()并删除属性以通过水线进行更新。希望对您有所帮助。

              variants:
              {
                  type: 'json',
                  columnType: 'array',
                  custom: (value) =>
                  {
                      /*
                        [
                              code    : unique, string
                              name    : string, maxLength[30]
                              cost    : number, isFinite
                              price   : number, isFinite
                              default : boolean
                        ]
                      */
                      return _.isArray(value)
                      &&     _.every(value, (variant1) =>
                      {
                          return _.countBy(value, (variant2) =>
                          {
                              return variant2.code == variant1.code ? 'eq' : 'uneq';
                          }).eq <= 1
                          && _.isString(variant1.name) && variant1.name.length < 30
                          && _.isNumber(variant1.cost) && _.isFinite(variant1.cost)
                          && _.isNumber(variant1.price) && _.isFinite(variant1.price)
                          && _.isBoolean(variant1.default);
                      });
                  },
              },

      【讨论】:

        猜你喜欢
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 2020-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多