Disons que je veux regrouper et regrouper par documents dans MongoDb par le champ Description
.Comment effectuer un regroupement d'agrégation insensible à la casse dans MongoDb?
exécutant la commande suivante (sensible à la casse par défaut):
db['Products'].aggregate(
{ $group: {
_id: { 'Description': "$Description" },
count: { $sum: 1 },
docs: { $push: "$_id" }
}},
{ $match: {
count: { $gt : 1 }
}}
);
sur mes données échantillon me donne 1000 résultats, ce qui est bien.
Mais maintenant j'attendre à ce que l'exécution d'un insensible à la casse requête (en utilisant $toLower
) devrait me donner inférieur ou égal à 1000 résultats:
db['Products'].aggregate(
{ $group: {
_id: { 'Description': {$toLower: "$Description"} },
count: { $sum: 1 },
docs: { $push: "$_id" }
}},
{ $match: {
count: { $gt : 1 }
}}
);
Mais au lieu que j'obtenir plus de 1000 résultats. Cela ne peut pas être vrai, n'est-ce pas? Les entrées les plus communes devraient être regroupées pour produire moins de nombre total de groupements ... Je pense.
Alors, probablement, ma requête d'agrégation est erronée! Ce qui m'amène à ma question:
Comment le groupement d'agrégation insensible à la casse dans MongoDb devrait-il être effectué?
Si vous pensez qu'il y a un problème, vous devez demander d'une manière qui reproduit le problème. Vous devriez donc être en mesure d'afficher un petit jeu de données dans lequel '$ toLower' n'a pas l'effet désiré. Ce processus a généralement deux résultats. 1. Montre un vrai bug d'une manière reproductible. 2. Fait ressortir autre chose est le problème que vous ne pensiez pas être un problème. Voir [Comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve), dont BTW est essentiellement le même concept que le test unitaire. Doit être reproductible. –