有时我只想从多行中选择一个值。
假设我有一个客户模型,如下所示:
账户
- 识别码
- 名称名称名称
- 年龄
我只想选择名字。
你可以这样写:
AccountModel.findAll({
where: {
Age: {
$gt : 18
}
},
attributes: ['Name'],
raw : true
});
但这会在具有对象的数组中传回。
[{Name : "Sample 1"}, {"Name" : "Sample 2"}]
我想得到一个只有名字的数组,如下所示:
["Sample 1", "Sample 2"]
有没有可能用Sequelize实现这个功能?我已经搜索了文档,但是没有找到。
4条答案
按热度按时间ffscu2ro1#
使用Sequelize 3.13.0,似乎不可能让
find
返回一个平面值数组,而不是一个对象数组。解决此问题的一种方法是使用下划线或长破折号Map结果:
我已经上传了一个脚本来演示这个here。
需要注意的是,设置
raw: true
会使Sequelize find方法返回普通的旧JavaScript对象(即没有Instance方法或元数据)。这对性能可能很重要,但不会改变转换为JSON后的返回值。这是因为Instance::toJSON总是返回普通的JavaScript对象(没有Instance方法或元数据)。q5lcpyga2#
下面是cfogelberg使用lambda表达式给出的一个不错的ES6版本的答案(
Array.prototype.map()
只在IE9+中有效,lambda(箭头)函数没有IE支持):代码段(在ie中不起作用):
下面是我用来证明概念的一个小片段。如果它不起作用,你使用的是上面提到的不受支持的浏览器之一(无论如何,你不应该直接从浏览器进行db调用):
zbq4xfa03#
2020年解决方案
嗨乡亲们,你们可以轻松地做你们纯粹的“采摘”法:
zmeyuzjn4#
arr-pluck工作正常: