10

sequelize.jsを使用してテーブルから個別の行を選択する方法はありますか?ドキュメントを調べましたが、「ファインダーメソッド」はこのタスクを実行する方法を指定していません。

4

7 に答える 7

18

次のクエリに DISTINCT を適用するとします。

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

次に、これは、クエリ全体を自分で記述しなくても、目的を達成するための (ハックな) 方法です。

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

(Sequelize v2.1.0 でテスト済み)

編集 2015-06-08: Sequelize v3.1.1 でも動作します

于 2015-05-06T07:31:41.753 に答える
4

「node_modules/sequelize / lib / dialogts / mysql/query-generator.js」を編集します

118行目あたり

変化する

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

の中へ

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

distinct: trueこれで、続編リクエストにオプションを追加できます

お役に立てば幸いです-_^

于 2012-12-06T08:00:03.657 に答える
3

自動的に行うことはできませんが、自分で SQL を作成することを気にしない場合は、次のようにすることができます。

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

楽しむ :)

アップデート

  1. Sequelizeはas promise 関数thenの代わりに使用するようになりました。success
  2. Sequelize.queryパラメータのみを使用するようにリファクタリングされsqloptions
  3. raw受け入れますtrue/falseplain、値として受け入れません。

したがって、新しいバージョンによると、コードは次のようになります。

    sequelize.query('sql goes here', { raw: true }).then(function(data){
        console.log(data);
    });
于 2012-08-29T06:33:56.057 に答える
0

Sequelize バージョン 1.7 の時点で、select クエリは lib/dialects/abstract/query-generator.js に移動されました。

1167行目辺りで変更

mainQueryItems.push("SELECT "+mainAttributes.join ....)

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

ちなみに、私は「DISTINCT」に対応しているSqliteとPostgresを使っています。使用しているすべての SQL フレーバーに対して生成されるため、distinct をサポートしない方言を使用している場合、明らかにこの行が問題を引き起こします。これが、この単純な変更がメインの Sequelize ソース ツリーに反映されていない理由だと思います。

于 2014-12-27T16:52:37.930 に答える