Sequelize JS:如何删除结果集中的嵌套对象

时间:2015-12-13 12:28:16

标签: javascript node.js sequelize.js

使用sequelize.js时,如何指定返回的对象不包含嵌套对象的包含模型。

E.G:

Model1.findAll({
  include: [{ model: Model2 }]
})

这将返回:

{ id: X, ..., Model2: { ... } }

但我想得到

{ id: X, ..., <model2 attributes> }

1 个答案:

答案 0 :(得分:1)

如果不修改结果对象,就无法做到这一点。

您有两种选择:

var _ = require("lodash");

Model1
    .findAll()
    .then( function( instance1 ) { 
        return instance1
            .getModel2()
            .then( function( instance2 ) {
                return _.extend(instance1.toJSON(), instance2.toJSON() );
            });
    }).then( function( instance1 ) { console.log(instance1) } );

这将创建两个数据库查询。

您的第二个选择是:

var _ = require("lodash");

Model1
    .findAll({
        include: [{ model: Model2 }]
    })
    .then( function( instance1 ) { return instance1.toJSON() } )
    .then( function( instance1 ) {
        var flatInstance = _.extend(instance1, instance1['Model2']);
        delete flatInstance['Model2'];
        return flatInstance;
    })
    .then( function( instance1 ) { console.log(instance1) } );

只使用一个查询。