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é
Vous devez être insensible à
case 进行排序
Supposons que vous ayez besoin de
name
和age
,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 } } ]