从没有元信息序列化的查询中获取结果集

我是Node.js / Sequelize.js的新手。 我有以下一段代码查询:

var agent_list = models.agent.findAll({ subQuery: false, where: qry_filter, attributes: select_attributes, include:include_models, group: ['agent_id'], order: agent_data.sort || appConfig.DEFAULT_AGENT_SORT, limit: agent_data.num_results || appConfig.DEFAULT_RESPONSE_SIZE }) .then(function(agent_list){ console.log(agent_list); }); 

语句“console.log(agent_list)”打印从数据库检索的数据加上元信息,如选项:{…},modelOptions:{…}等dataValues对象包含我想要的数据。 结果集是嵌套的js对象,每个对象具有相同的结构,因此循环遍历结果集并仅获取dataValues将非常困难。

我有使用PHP的经验,像这样的$ db – > Execute(“$ qry”)会返回结果集元和获取行$ db – >执行(“$ qry”) – > getRows()可以使用。 如何实现这个续集?

有一个名为sequelize-values的npm包,你可以使用。

所以在你的情况下,你的代码是

 models.agent.findAll({ subQuery: false, where: qry_filter, attributes: select_attributes, include: include_models, group: ['agent_id'], order: agent_data.sort || appConfig.DEFAULT_AGENT_SORT, limit: agent_data.num_results || appConfig.DEFAULT_RESPONSE_SIZE }).then(function(agent_list) { return agent_list.map(function(agent) { return agent.getValues(); }); }).then(function(agent_list) { console.log(agent_list); }); 

Sequelize不使用结果集或行等概念。 这是一个ORM,所以行(包括嵌套关联)被视为嵌套对象的对象。 它还应用了“活动logging”模式,因此每个返回的对象都有附加的方法,比如“保存”,“更新”,“删除”等等。

当Sequelize实例被序列化为JSON时,它们会剥离所有Sequelize“元数据”属性,并返回简单的对象,就像您期望的那样。

此外,Sequelize实例使用属性获取器和设置器来透明地performance得像简单的JS对象。 这意味着你可以做一些像agent_list[0].myProperty = 1; console.log(agent_list[0].myProperty); agent_list[0].myProperty = 1; console.log(agent_list[0].myProperty); 它会像你期望的那样行事。 这样做的原因是它可以跟踪更新的值,所以稍后的“更新”调用将只更新已更改的列。

您应该无需手动从查询结果中获取“行”。