如何在Sequelize.js中定义对象数组?

时间:2014-08-29 09:13:44

标签: javascript sequelize.js

如何在Sequelize.js模型中定义对象数组?
我需要这样的东西

{
    "profiles" : [
        {
            "profile_id": 10,
            "profile_pictures" : ["pic1.jpg","pic2.jpg","pic3.jpg"],
            "profile_used_id" : 12
        },
        ... // more profiles
    ]
}

我检查了docs,但无法找到相关的数据类型,我在这里遗漏了什么吗?

3 个答案:

答案 0 :(得分:12)

我通过定义我的模型成功地模仿了数组:

var MyModel = sequelize.define('MyModel', {
    myArrayField: { 
        type: DataTypes.STRING, 
        get: function() {
            return JSON.parse(this.getDataValue('myArrayField'));
        }, 
        set: function(val) {
            return this.setDataValue('myArrayField', JSON.stringify(val));
        }
    }
}

答案 1 :(得分:9)

我现在可以想到2个解决方案(如果使用PostgreSQL,则可以考虑第3个解决方案)。

  1. 我们有一个关系数据库,它的原则也适用于Sequelize,它是关系数据库的ORM。最简单的方法是创建另一个表或实体并将它们关联为1:n关系。 为此,在Sequelize中添加一个新模型并定义其关联,如下所述:http://sequelizejs.com/articles/getting-started#associations 你可能有2个表。一张有N张照片的个人资料表。

  2. 如果只是一个文件名或网址,您可以将Javascript数组序列化为JSON字符串,如:

    //保存前

    var mypics = [“pic1.jpg”,“pic2.jpg”]; profile.pictures = JSON.stringify(mypics); profile.save()

    //使用前加载后

    var profile = Profile.get(1) pictures = JSON.parse(profile.pictures);

  3. 如果您使用PostgreSQL,您可以在此字段中使用Array数据类型,请参阅: http://www.postgresql.org/docs/8.4/static/arrays.html

    或JSON数据类型:

    http://www.postgresql.org/docs/9.3/interactive/datatype-json.html

  4. 如果您的Picture对象在该功能中是或将更复杂,请转到1。或者,如果您想按文件名查询。 如果您将来不做任何数据过滤或复杂数据,请转到2。

    去3?我认为最好坚持使用Sequelize抽象而不是使用自定义数据类型,即使在这种情况下也是如此。也许你最好坚持1或2。

答案 2 :(得分:-5)

尝试定义像这样的数组

var profiles = { profile_id: 10, profile_pictures: { "pic1.jpg", "pic2.jpg", "pic3.jpg" }, profile_used_id: 12 }