1. ホーム
  2. node.js

[解決済み] nodejsでfindAllのソート順を続編にする

2022-01-30 07:47:04

質問

データベースから以下のようにオブジェクトのリストを出力しようとしているのですが、where節にidを追加したので、データをソートして取得したいです。

exports.getStaticCompanies = function () {
    return Company.findAll({
        where: {
            id: [46128, 2865, 49569,  1488,   45600,   61991,  1418,  61919,   53326,   61680]
        },
        attributes: ['id', 'logo_version', 'logo_content_type', 'name', 'updated_at']
    });
};

しかし、問題は、レンダリング後、すべてのデータが次のようにソートされてしまうことです。

46128, 53326, 2865, 1488, 45600, 61680, 49569, 1418, ....

調べたところ、id順でも名前順でもないようです。どうしたらいいでしょうか?

どのように解決するのですか?

sequelizeでは、order by節を簡単に追加することができます。

exports.getStaticCompanies = function () {
    return Company.findAll({
        where: {
            id: [46128, 2865, 49569,  1488,   45600,   61991,  1418,  61919,   53326,   61680]
        }, 
        // Add order conditions here....
        order: [
            ['id', 'DESC'],
            ['name', 'ASC'],
        ],
        attributes: ['id', 'logo_version', 'logo_content_type', 'name', 'updated_at']
    });
};

を追加した様子をご覧ください。 order オブジェクトの配列?

order: [
      ['COLUMN_NAME_EXAMPLE', 'ASC'], // Sorts by COLUMN_NAME_EXAMPLE in ascending order
],

編集する

オブジェクトを受信したら、その順番を .then() のプロミスです。カスタムオーダーに基づくオブジェクトの配列の順序付けに関するこの質問をチェックしてください。

オブジェクトの配列を、別の配列の順序に基づいて並べ替えるにはどうすればよいですか?