Dans MongoDB, le $sample
l'étape de pipeline d'agrégation sélectionne au hasard le nombre spécifié de documents à partir de son entrée.
Exemple
Supposons que nous ayons une collection appelée employees
avec les documents suivants :
{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
Nous pouvons utiliser le $sample
étape pour sélectionner au hasard un nombre spécifié de documents de cette collection.
Exemple :
db.employees.aggregate(
[
{
$sample: { size: 3 }
}
]
)
Résultat :
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
Dans ce cas, j'ai précisé que la taille de l'échantillon est de 3. Nous pouvons voir que trois documents ont été retournés dans un ordre aléatoire.
Voici le résultat si j'exécute à nouveau le même code :
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Nous obtenons une sélection différente de documents.
Nous pouvons augmenter la taille de l'échantillon en augmentant le nombre.
Exemple :
db.employees.aggregate(
[
{
$sample: { size: 5 }
}
]
)
Résultat :
{ "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 }
Renvoyer tous les documents au hasard
Si la taille de l'échantillon demandé correspond ou est supérieure au nombre de documents de la collection, tous les documents sont renvoyés dans un ordre aléatoire.
Exemple :
db.employees.aggregate(
[
{
$sample: { size: 100 }
}
]
)
Résultat :
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 }
Comment $sample
Calcule le résultat
Le $sample
utilise l'une des deux méthodes pour produire le résultat. La méthode réelle utilisée dépend du scénario.
Le tableau suivant décrit la méthode utilisée pour chaque scénario.
Scénario | Méthode utilisée pour produire les résultats |
---|---|
Toutes les conditions suivantes sont remplies : – $sample est la première étape du pipeline – La taille de l'échantillon spécifié est inférieure à 5 % du total des documents de la collection – La collection contient plus de 100 documents | $sample utilise un curseur pseudo-aléatoire pour sélectionner les documents. |
Toutes les conditions ci-dessus ne sont pas rencontré. | $sample effectue une analyse de collecte suivie d'un tri aléatoire pour sélectionner le nombre spécifié de documents. |
Doublons
La documentation MongoDB avertit que $sample
peut afficher le même document plus d'une fois dans son jeu de résultats.