2015-11-06 128 views
1

有時候我只想從多行中選擇一個值。使用字符串而不是對象的Sequelize返回數組

讓我們來想象我有一個帳戶模型,看起來像這樣:

帳戶

  • 編號
  • 名稱
  • 年齡

,我也只喜歡選擇名稱。

你會寫這樣的事:

AccountModel.findAll({ 
     where: { 
      Age: { 
       $gt : 18 
      } 
     }, 
     attributes: ['Name'], 
     raw : true 
    }); 

但是,這將與對象的數組返回。

[{Name : "Sample 1"}, {"Name" : "Sample 2"}] 

我想獲得只有名字,像這樣的數組:

["Sample 1", "Sample 2"] 

是否有可能與Sequelize實現這一目標? 我搜索了槽的文檔,但無法找到它。

回答

2

使用Sequelize 3.13.0它看起來不可能有find返回一個平面數組值而不是對象數組。

一個解決問題的方法是使用地圖或下劃線的lodash結果:

AccountModel.findAll({ 
    where: { 
     Age: { 
      $gt : 18 
     } 
    }, 
    attributes: ['Name'], 
    raw : true 
}) 
.then(function(accounts) { 
    return _.map(accounts, function(account) { return account.Name; }) 
}) 

我上傳演示此here的腳本。

作爲一個快速提示,設置raw: true會使Sequelize find方法返回普通的舊JavaScript對象(即沒有實例方法或元數據)。這對於性能可能很重要,但在轉換爲JSON後不會更改返回的值。這是因爲Instance::toJSON總是返回一個普通的JavaScript對象(沒有實例方法或元數據)。

0

arr-pluck效果很好:

var pluck = require('arr-pluck'); 
 

 
AccountModel.findAll({ 
 
    where: { 
 
     Age: { 
 
      $gt : 18 
 
     } 
 
    }, 
 
    attributes: ['Name'], 
 
    raw : true 
 
}) 
 
.then(function(accounts) { 
 
    return pluck(accounts, 'Name'); 
 
})

相關問題