Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
$ajouter ToSet
L'opérateur d'$addToSetagrégation renvoie un tableau de valeurs uniques à partir d'une expression spécifiée pour chaque groupe. Il est utilisé au sein de l'$groupétape pour accumuler des valeurs distinctes, éliminant ainsi automatiquement les doublons.
Paramètres
-
expression: expression à évaluer pour chaque document du groupe.
Exemple (MongoDB Shell)
L'exemple suivant montre comment utiliser l'$addToSetopérateur pour collecter les villes uniques où les commandes ont été passées pour chaque client.
Créez des exemples de documents
db.orders.insertMany([ { _id: 1, customer: "Alice", city: "Seattle", amount: 100 }, { _id: 2, customer: "Alice", city: "Portland", amount: 150 }, { _id: 3, customer: "Bob", city: "Seattle", amount: 200 }, { _id: 4, customer: "Alice", city: "Seattle", amount: 75 }, { _id: 5, customer: "Bob", city: "Boston", amount: 300 } ]);
Exemple de requête
db.orders.aggregate([ { $group: { _id: "$customer", cities: { $addToSet: "$city" } } } ]);
Sortie
[
{ _id: 'Bob', cities: [ 'Seattle', 'Boston' ] },
{ _id: 'Alice', cities: [ 'Seattle', 'Portland' ] }
]
Exemple d'utilisation d'un opérateur de fenêtre (MongoDB Shell)
Nouveau depuis la version 8.0.2.
L'$addToSetopérateur peut également être utilisé comme opérateur de fenêtre dans la $setWindowFields scène. Dans ce contexte, il renvoie un tableau des valeurs uniques de l'expression spécifiée pour les documents de chaque fenêtre. Vous spécifiez l'opérateur dans le output champ et définissez éventuellement les limites de la fenêtre à l'aide d'un window document.
Note
Lorsqu'il est utilisé comme opérateur de fenêtre dans$setWindowFields, $addToSet est limité à 100 Mo de données intermédiaires. Une opération dépassant cette limite renvoie une erreur.
Créez des exemples de documents
db.visits.insertMany([ { _id: 1, customer: "Alice", day: 1, city: "Seattle" }, { _id: 2, customer: "Alice", day: 2, city: "Portland" }, { _id: 3, customer: "Alice", day: 3, city: "Seattle" }, { _id: 4, customer: "Bob", day: 1, city: "Boston" }, { _id: 5, customer: "Bob", day: 2, city: "Boston" } ]);
Exemple de requête
L'exemple suivant partitionne les documents parcustomer, trie chaque partition par day et renvoie l'ensemble de city valeurs uniques depuis le début de la partition jusqu'au document actuel.
db.visits.aggregate([ { $setWindowFields: { partitionBy: "$customer", sortBy: { day: 1 }, output: { citiesSoFar: { $addToSet: "$city", window: { documents: ["unbounded", "current"] } } } } } ]);
Sortie
[
{ "_id": 1, "customer": "Alice", "day": 1, "city": "Seattle", "citiesSoFar": [ "Seattle" ] },
{ "_id": 2, "customer": "Alice", "day": 2, "city": "Portland", "citiesSoFar": [ "Portland", "Seattle" ] },
{ "_id": 3, "customer": "Alice", "day": 3, "city": "Seattle", "citiesSoFar": [ "Portland", "Seattle" ] },
{ "_id": 4, "customer": "Bob", "day": 1, "city": "Boston", "citiesSoFar": [ "Boston" ] },
{ "_id": 5, "customer": "Bob", "day": 2, "city": "Boston", "citiesSoFar": [ "Boston" ] }
]
Chaque document est enrichi citiesSoFar d'un ensemble de city valeurs uniques au sein de sa partition depuis le début jusqu'au document actuel. Comme pour la forme accumulateur, l'ordre des valeurs dans le tableau renvoyé n'est pas garanti.
Exemples de code
Pour afficher un exemple de code d'utilisation de l'$addToSetopérateur, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser. Les exemples suivants montrent à la fois l'utilisation de l'accumulateur (in$group) et l'utilisation de l'opérateur de fenêtre (in$setWindowFields) :