Dans mon application, j'ai un tableau Produits qui contient différents types de produits. Dans chaque enregistrement ont un appel de colonne updateDetails
et c'est un objet JSON
avec les attributs ci-dessous.
const updateDetails = { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2}
Mais dans certains enregistrements de la table Products updateDetails
est null
et sera mis à jour après l'enregistrement modifié par n'importe quel utilisateur.
Mon exemple d'enregistrements DB comme ci-dessous.
[
{
name: 'Product 1',
type: 'a',
updateDetails: { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2 }
},
{
name: 'Product 2',
type: 'a',
updateDetails: null
},
{
name: 'Product 3',
type: 'a',
updateDetails: { time: '2020-05-27T05:53:31.540Z', userId: 1, officeId: 2 }
},
{
name: 'Product 4',
type: 'a',
updateDetails: null
},
{
name: 'Product 5',
type: 'a',
updateDetails: { time: '2020-05-20T05:53:31.540Z', userId: 1, officeId: 2 }
}
]
Ce que je voulais faire, c'est avoir besoin d'obtenir des produits en les triant sur updateDetails.time
ordre desc et besoin d'avoir des enregistrements avec updateDetails = null
à la fin des résultats. Résultats attendus comme ci-dessous.
[
{
name: 'Product 1',
type: 'a',
updateDetails: { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2 }
},
{
name: 'Product 3',
type: 'a',
updateDetails: { time: '2020-05-27T05:53:31.540Z', userId: 1, officeId: 2 }
},
{
name: 'Product 5',
type: 'a',
updateDetails: { time: '2020-05-20T05:53:31.540Z', userId: 1, officeId: 2 }
},
{
name: 'Product 2',
type: 'a',
updateDetails: null
},
{
name: 'Product 4',
type: 'a',
updateDetails: null
}
]
J'ai utilisé la requête ci-dessous mais sans succès.
const results = await Product.findAll({
{ where: { type: 'a' } },
limit: 10,
order: [['updateDetails.time', 'DESC']]
})
Mais cela ne pouvait pas donner les résultats souhaités. Merci d'avance.
Eh bien, si rien ne fonctionne, vous avez toujours une option pour trier cela en JavaScript brut :)
var data =[
{
name: 'Product 1',
type: 'a',
updateDetails: { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2 }
},
{
name: 'Product 2',
type: 'a',
updateDetails: null
},
{
name: 'Product 3',
type: 'a',
updateDetails: { time: '2020-05-27T05:53:31.540Z', userId: 1, officeId: 2 }
},
{
name: 'Product 4',
type: 'a',
updateDetails: null
},
{
name: 'Product 5',
type: 'a',
updateDetails: { time: '2020-05-20T05:53:31.540Z', userId: 1, officeId: 2 }
}
]
data.sort((a,b)=>{
if(a.updateDetails && !b.updateDetails){
return -1
}
return a.name - b.name;
});
console.log(data)