【问题标题】:How to loop through result in sequelize如何在续集中循环结果
【发布时间】:2021-09-05 06:23:44
【问题描述】:

如何从响应中获取dataValues。我尝试过console.log(result.dataValues),但它返回未定义。

回应

[ User {
  dataValues: {
    id: 16,
    user_id: '140235016357535420',
    server_id: '535881918483398676',
    xp: 40995,
    coins: 0,
    createdAt: 2019-03-09T22
    :
    59: 09.216Z,
    updatedAt: 2019-03-09T22
    :
    59: 09.216Z
  },
},
User {
  dataValues: {
    id: 16,
    user_id: '140235016357535420',
    server_id: '535881918483398676',
    xp: 40995,
    coins: 0,
    createdAt: 2019-03-09T22
    :
    59: 09.216Z,
    updatedAt: 2019-03-09T22
    :
    59: 09.216Z
  },
},]

查询

User.findAll({
    where: {
        server_id: msg.guild.id,
    },
    limit: 2,
    order: [
        ['xp', 'DESC'],
    ],
}).then(result => {
    console.log(result);
});

型号

'use strict';
module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define('User', {
        user_id: DataTypes.STRING,
        server_id: DataTypes.STRING,
        xp: DataTypes.INTEGER,
        coins: DataTypes.INTEGER,
    }, {});
    /*  User.associate = function(models) {
        // associations can be defined here
    };*/
    return User;
};

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    这看起来像一个用户对象数组; dataValues 是每个用户的孩子。首先遍历数组并获取对象,然后提取dataValues

    for (let i = 0; i < result.length; i++)  {
      console.log(result[i].dataValues);
    }
    

    使用forEach()

    result.forEach( 
      (user) => { 
        console.log(user.dataValues);
      }
    );
    

    【讨论】:

    • Array.forEach 不是异步的。看起来可能只是这样,具体取决于您在回调中执行的操作。
    【解决方案2】:

    在渲染/打印之前,您需要将模型数组转换为数组

    const records = results.map(result => result.dataValues)
    

    详情:

    在模型搜索之外,您有一系列模型,例如:

    [ User {
      dataValues: {
        id: 16,
        user_id: '140235016357535420',
        server_id: '535881918483398676',
        xp: 40995,
        coins: 0,
        createdAt: 2019-03-09T22,
        updatedAt: 2019-03-09T22
      },
    },
    ...]
    

    像这样“映射”它:

    const results = await User.findAll();
    
    const records = results.map(function(result) {
                return result.dataValues
            })
    

    你会得到一个这样的数组:

    [
    {
        id: 16,
        user_id: '140235016357535420',
        server_id: '535881918483398676',
        xp: 40995,
        coins: 0,
        createdAt: 2019-03-09T22,
        updatedAt: 2019-03-09T22
    },...
    ]
    
    

    *精简版:

    const records = results.map(result => result.dataValues)
    

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 2015-01-28
      • 2010-12-17
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 2013-05-01
      • 2014-04-09
      相关资源
      最近更新 更多