Trier la collection de groupes après avoir utilisé une requête globale
P粉558478150
P粉558478150 2024-02-04 10:35:22
0
1
355

J'utilise l'agrégation pour que tous les utilisateurs portent le même nom, mais chaque fois que j'interroge cette API, les résultats renvoyés ne sont pas triés même si j'ajoute le champ $sort by 'name'.

const aggregateQuery: any = [
            { $group: { _id: '$name', count: { $sum: 1 }, users: { $push: '$$ROOT' } } },
            { $match: { count: { $gt: 1 } } },
            { $unwind: '$users' },
            { $replaceRoot: { newRoot: '$users' } },
            { $sort: { name: 1 } }
        ];`

        const users = await this.userRepository.getModel().aggregate(aggregateQuery).exec();

L'ordre des enregistrements n'est pas trié

P粉558478150
P粉558478150

répondre à tous(1)
P粉739942405

Vous devez être insensible à case 进行排序
Supposons que vous ayez besoin de nameage,

Essayez cette requête :

[ { "$project": { "name": 1, "age" : 1, "insensitive": { "$toLower": "$name" } }},{ $group: { _id: ' $name', count: { $sum: 1 }, users: { $push: '$$ROOT' } } }, { $match: { count: { $gte: 1 } } }, { $unwind: '$用户' }, { $replaceRoot: { newRoot: '$users' } }, { $sort: { insensitive: 1 } } ]

Si vous avez plus de champs à ajouter à la sortie, essayez la requête suivante au lieu de celle ci-dessus.

[ { "$project": { "name": 1, createdAt : 1 }},{ $group: { _id: '$name', count: { $sum: 1 }, users: { $push : '$$ROOT' } } }, { $match: { count: { $gte: 1 } } }, {"$addFields":{"users.insensitive": { "$toLower": "$_id" } ,}}, { $unwind: '$users' }, { $replaceRoot: { newRoot: '$users' } }, { $sort: { insensitive: 1 } } ]

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal