2012-08-28 38 views
2

有沒有一種方法可以使用sequelize.js從表中選擇不同的行? 我查看了文檔,但「finder methods」未指定完成此任務的方法。Sequelize選擇不同的行

回答

0

這是不可能自動,但如果你不介意創建你自己的SQL,你可以這樣做:

sequelize.query('sql goes here', null, { raw: plain }).success(function(data){ 
    console.log(data) 
}) 

玩得開心:)

UPDATE

  1. Sequelize現在使用then而不是success作爲promise函數。
  2. Sequelize.query已重構只使用paramters sqloptions
  3. raw接受true/false但沒有plain的價值。

因此,根據新的版本,代碼應該是這樣的:

sequelize.query('sql goes here', { raw: true }).then(function(data){ 
     console.log(data); 
    }); 
+0

好的。我明白了:) 可能在接下來的版本中,可以添加一個bool選項{distinct:true}(默認爲false)。 – shk

+2

是的不知道它是否會在下一個版本,但我們應該添加它 – sdepold

6

編輯你的 「node_modules/sequelize/lib中/方言/ mysql /下查詢generator.js」

在圍繞線118

變化

var query = "SELECT <%= attributes %> FROM <%= table %>" 

var query = "SELECT " + ((options.distinct)? 'DISTINCT ':'') +"<%= attributes %> FROM <%= table %>", 

現在你可以在你的sequelize要求增加一個選項distinct: true

希望它有助於-_-^

0

由於Sequelize 1.7版,選擇查詢已移入的lib /方言/abstract/query-generator.js。

周邊線1167,更改

mainQueryItems.push( 「選擇」 + mainAttributes.join ....)

mainQueryItems.push('SELECT '); 
    if (options.distinct) { 
     mainQueryItems.push('DISTINCT '); 
    } 
    mainQueryItems.push(mainAttributes.join(', ') + ' FROM ' + options.table); 

通過方式,我使用Sqlite和Postgres,兩者都支持「DISTINCT」。如果您使用的方言不支持截然不同的特性,那麼顯然這條線會給您帶來問題,因爲它會針對您所使用的所有SQL類型生成。我懷疑這就是爲什麼這個簡單的改變並沒有將它變成主要的Sequelize源代碼樹。

5

假設你想申請DISTINCT以下查詢:

Tuple.findAll({attributes: ['key', 'value']}); 

那麼這是一個(的hackish)的方式來實現你想要的東西,而不必自己寫整個查詢:

Tuple.findAll({attributes: [[Sequelize.literal('DISTINCT `key`'), 'key'], 'value']}); 

(測試用Sequelize V2.1.0)

編輯2015-06-08:仍然Sequelize V3.1.1工作

1

這有點類似於帕斯卡爾·路德維希提出的解決方案,但對於那些降落在這裏希望得到不同的值的列表給定列,您可以執行以下操作:

MyModel.aggregate('teh_field', 'DISTINCT', { plain: false }).then(...) 
// Resolves to: [ { DISTINCT: value1 }, { DISTINCT: value2 }, ... ] 

就這樣,很容易將其改造成一個標準的列表:

MyModel.aggregate('teh_field', 'DISTINCT', { plain: false }) 
    .map(function (row) { return row.DISTINCT }) 
    .then(function (tehValueList) { 
     // tehValueList = [ value1, value2, ... ] 
    }) 
; 
1

你可以做到以下幾點:

myModel.findAll({ 
    attributes: [[sequelize.fn('DISTINCT', sequelize.col('col_name')), 'alias_name']], 
    where:{} 
}).then(data => {})..... 

issues採取和它的作品。