使用SequelizeJS查找或创建

时间:2013-05-30 23:54:11

标签: node.js express sequelize.js

我尝试使用SequelizeJS的“findOrCreate”功能,但它不起作用。

变量“created”是“undefined”,所以我不知道为什么因为它是SequelizeJS使用的变量...

for( var i = 0; i < tags.length; i++ ){
    global.db.Tag.findOrCreate({name: tags[i]}).success( function(tag, created){
        if( created ){
            global.db.PostTag.create({
                PostId: id,
                TagId: tag.id
            });
        }
    });
}

4 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。从1.7.0-alpha2升级到2.0.0-alpha2解决了它。 干杯

答案 1 :(得分:2)

对我来说,答案是将我的承诺解决方案从.then改为.spread。这与Sequelize返回数据的格式有关。

for( var i = 0; i < tags.length; i++ ){
    global.db.Tag.findOrCreate({
        name: tags[i]
    }).spread( function(tag, created){
        if( created ){
            global.db.PostTag.create({
                PostId: id,
                TagId: tag.id
            });
        }
    });
}

答案 2 :(得分:1)

global.db.Tag.findOrCreate({
    where:{
        name: tags[i]
    }, 
    defaults: {
    //properties you want on create
    }
}).then( function(tag){
    var created  = tag[1];
    tag = tag[0]; //new or found
    if( created ){

    }
}).fail(function(err) {

});
https://github.com/sequelize/sequelize/wiki/Upgrading-to-2.0

答案 3 :(得分:0)

昨天我们遇到了这个问题,我们得以解决:

`Tag.findOrCreate({
     where: { condition: value },
     // in the event that it is not found
     default: { /* properties of the model to create */ }
 })
     .then(tag => res.send(tag))
     .catch(err => res.send(err))`

返回:

{
    {
        /* tagProperties */
    },
    /* true if the tag was created
       false if the tag was found */
}