recherche

Maison  >  Questions et réponses  >  le corps du texte

Trier la collection de groupes après avoir utilisé une requête globale

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粉558478150P粉558478150383 Il y a quelques jours404

répondre à tous(1)je répondrai

  • P粉739942405

    P粉7399424052024-02-05 00:05:39

    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 } } ]

    répondre
    0
  • Annulerrépondre