Return flat object from sequelize with association

flatten, json, sequelize.js

Solution

Part of your issue is probably that your `result` is an array of model instances, so you might be having issues flattening it if you didn't call `toJSON` on the elements in the array. I provided code that would flatten your example:

result.forEach(obj => { 
    Object.keys(obj.toJSON()).forEach(k => {
        if (typeof obj[k] === 'object') {       
            Object.keys(obj[k]).forEach(j => obj[j] = obj[k][j]);
        }
    });
});

You can also add `raw: true` as an option to `findAll`, which will flatten your object, but it will look like this:

[   
  {
    "field1": "someval",
    "field2": "someval1",
    "assoc_table.field_a": 1,
    "assoc_table.field_b": "someval"
  },
  ...
]

Problem

I am working on converting all my queries in sequelize. The problem I have come across is that when select queries include associations (ex. one to many), the object I get is an array of nested objects. It looks something like: ``` [ { "field1": "someval", "field2": "someval1", "assoc_table": { "field_a": 1, "field_b": "someval" } }, { "field1": "someval", "field2": "someval3", "assoc_table": { "field_a": 5, "field_b": "someval" } }, { "field1": "someval", "field2": "someval3", "assoc_table": { "field_a": 12, "field_b": "someval" } } ] ``` I tried to use different modules to flatten the objects (inside a loop, each object individually), but I always got an error telling that what I was trying to flatten were not just objects. Moreover, I would prefer avoiding the part where objects are flattened, and simply get a flat result with sequelize. The sequelize code looks something like this: ``` models.table1.findAll({ attributes: ['field1', 'field2'], where: {field1: someval}, include: [{model: models.assoc_table, required: true, attributes:['field_a', 'field_b']}] }).then(function (result) { res.send(result); }).catch(function(error) { console.log(error); }); ```

Original source