MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $ taux d'échantillonnage

Dans MongoDB, le $sampleRate l'étape du pipeline d'agrégation correspond à une sélection aléatoire de documents d'entrée.

Le nombre de documents sélectionnés se rapproche du taux d'échantillonnage exprimé en pourcentage du nombre total de documents.

Le $sampleRate L'opérateur a été introduit dans MongoDB 4.4.2.

Lorsque vous utilisez $sampleRate , vous fournissez le taux d'échantillonnage sous la forme d'un nombre à virgule flottante entre 0 et 1 . Le processus de sélection utilise une distribution aléatoire uniforme, et le taux d'échantillonnage que vous fournissez représente la probabilité qu'un document donné soit sélectionné lors de son passage dans le pipeline.

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(
   [
      { 
        $match: { $sampleRate: 0.33 } 
      }
   ]
)

Résultat :

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

En fournissant un taux d'échantillonnage de 0.33 , nous avons précisé qu'environ un tiers des documents devaient être restitués.

Cependant, le résultat réel peut varier considérablement, selon le nombre de documents dans la collection. Les collections avec un plus petit nombre de documents auront des résultats assez variés, alors que les collections plus importantes devraient être plus proches de la distribution aléatoire uniforme attendue.

Pour illustrer cela, voici le jeu de résultats que j'obtiens lorsque j'exécute à nouveau le même code :

{ "_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 }

Et encore :

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

Et encore une fois :

{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

Il s'agit d'une collection plus petite, et les résultats varient donc considérablement.

Si vous avez besoin d'un nombre exact de documents à retourner, utilisez le $sample scène à la place.