sequelize findAll l'ordre de tri dans nodejs
Je suis en train de sortir tous les objets de la liste à partir de la base de données avec sequelize que suivre et que vous souhaitez obtenir les données sont triées comme je l'ai ajouté id dans la clause where.
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']
});
};
Mais le problème, c'est après le rendu, toutes les données sont classés comme suit.
46128, 53326, 2865, 1488, 45600, 61680, 49569, 1418, ....
Que j'ai trouvé, c'est ni triés par id, ni nom. S'il vous plaît aider moi comment faire pour le résoudre.
OriginalL'auteur PPShein | 2016-03-28
Vous devez vous connecter pour publier un commentaire.
Dans sequelize vous pouvez facilement ajouter des clauses order by.
Voir comment j'ai ajouté le
order
tableau d'objets?Edit:
Vous pourriez avoir à commander les objets une fois qu'ils ont été reçu à l'intérieur de la
.then()
promesse. La caisse de cette question sur la commande d'un tableau d'objets basé sur une commande personnalisée:Comment puis-je trier un tableau d'objets en fonction de la commande d'un autre tableau?
46128, 2865, 49569, 1488, 45600, 61991, 1418, 61919, 53326, 61680
.Hmmm. Vous ne serez pas en mesure de le faire (autant que je sache)! Vous aurez à chercher dans le tri des objets une fois que vous avez reçu dans le .alors() promesse? Pourquoi avez-vous besoin d'ordonnance dans cette gamme spécifique?! Est-il un ordre de clause qui pourrait peut-être le faire pour vous? @ppshein
OriginalL'auteur James111
Vous pouvez accomplir ceci dans une arrière-main de la sorte avec le code suivant:
C'est un peu limitée, car elle a de très mauvaises caractéristiques de performance passé quelques dizaines d'enregistrements, mais il est acceptable à l'échelle que vous utilisez.
Ceci va produire une requête SQL qui ressemble à quelque chose comme ceci:
OriginalL'auteur drs
Si vous utilisez MySQL, vous pouvez utiliser
order by FIELD(id, ...)
approche:Gardez à l'esprit, il peut être lente. Mais devrait être plus rapide que le tri manuel avec JS.
OriginalL'auteur Pavlo Razumovskyi
Je ne pense pas que ce soit possible dans Sequelize la clause order, car autant que je peux dire, ces clauses sont destinées à être binaire des opérations applicables à chaque élément de votre liste. (Ce qui fait sens, aussi, c'est généralement la façon dont le tri d'une liste de travaux.)
Ainsi, une clause order peut faire quelque chose comme de l'ordre d'une liste par recursing dessus de lui demander "lequel de ces 2 éléments est vieux?" Alors que votre commande n'est pas réductible à une opération binaire (
compare_bigger(1,2) => 2
), mais est simplement une suite arbitraire (2,4,11,2,9,0
).Quand j'ai frappé de cette question avec
findAll
, voici ma solution (sous dans vos résultats pournumbers
):Qui renvoie
[2, 23, 20, 53, 9]
. Je ne pense pas qu'il y est un meilleur compromis que nous pouvons faire. Vous pourriez itération en place sur votre commandés id avecfindOne
, mais alors vous le faites n requêtes lorsque 1 le fera.OriginalL'auteur Alex Moore-Niemi
Si vous souhaitez trier les données en ordre Croissant ou Décroissant de base de colonne, à l'aide
sequlize js
, utilisez leorder
méthode desequlize
comme suitOriginalL'auteur meenal