从没有元信息的查询中获取结果集 Sequelize
Get Resultset From Query without Meta Information Sequelize
我是 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)" 打印从 db 检索的数据以及元信息,如 options:{...} ,modelOptions: {...} 等。dataValues 对象包含我想要的数据。结果集是嵌套的 js 对象,每个对象都具有相同的结构,因此很难遍历结果集并仅获取数据值。
我有与 PHP 合作的经验
$db -> Execute("$qry") 将 return 结果集与元并获取行
$db -> Execute("$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,因此行(包括嵌套关联)被视作具有嵌套对象的对象。它还应用了 "Active Record" 模式,因此每个 returned 对象都添加了额外的方法,如 "save"、"update"、"delete" 等等。
当 Sequelize 实例被序列化为 JSON 时,它们会剥离所有 Sequelize "metadata" 属性,而只是 return 简单对象,正如您所期望的那样。
此外,Sequelize 实例利用 属性 getter 和 setter 来透明地表现得像简单的 JS 对象。这意味着您可以执行 agent_list[0].myProperty = 1; console.log(agent_list[0].myProperty);
之类的操作,它会像您期望的那样运行。它这样做的原因是它可以跟踪更新的值,因此以后的 "update" 调用将只更新已更改的列。
您应该不需要从查询结果中手动获取 "rows"。
我是 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)" 打印从 db 检索的数据以及元信息,如 options:{...} ,modelOptions: {...} 等。dataValues 对象包含我想要的数据。结果集是嵌套的 js 对象,每个对象都具有相同的结构,因此很难遍历结果集并仅获取数据值。
我有与 PHP 合作的经验 $db -> Execute("$qry") 将 return 结果集与元并获取行 $db -> Execute("$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,因此行(包括嵌套关联)被视作具有嵌套对象的对象。它还应用了 "Active Record" 模式,因此每个 returned 对象都添加了额外的方法,如 "save"、"update"、"delete" 等等。
当 Sequelize 实例被序列化为 JSON 时,它们会剥离所有 Sequelize "metadata" 属性,而只是 return 简单对象,正如您所期望的那样。
此外,Sequelize 实例利用 属性 getter 和 setter 来透明地表现得像简单的 JS 对象。这意味着您可以执行 agent_list[0].myProperty = 1; console.log(agent_list[0].myProperty);
之类的操作,它会像您期望的那样运行。它这样做的原因是它可以跟踪更新的值,因此以后的 "update" 调用将只更新已更改的列。
您应该不需要从查询结果中手动获取 "rows"。