在Sails中使用数组属性类型

时间:2016-07-24 08:19:07

标签: sails.js waterline

我希望在我的应用中使用sails属性类型'array',但我找不到任何文档。

我想做以下事情:

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

图像是一个数组,它将保存图像网址列表,位置将保存2个浮点数。这会在帆船上工作吗?另外,我怎样才能让它发挥作用。 感谢

PS:我只与MongoDB合作

4 个答案:

答案 0 :(得分:4)

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

g_temp=zeros(length(perms1),1);

答案 1 :(得分:3)

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

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

请参阅Sails ORM Attributes

答案 2 :(得分:1)

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

  

不再支持“数组”类型。要在模型中使用此类型,请更改   将type设置为一种受支持的类型,并将columnType属性设置为一列   模型适配器支持的类型,例如{type:'json',columnType:'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。确保在发布时可能需要拆分数据.split(',')

答案 3 :(得分:0)

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

        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);
                });
            },
        },