Partager via


$mod (requête d’évaluation)

S’APPLIQUE À : MongoDB vCore

L’opérateur $mod effectue une opération modulo sur la valeur d’un champ et sélectionne les documents avec un résultat spécifié. Cet opérateur est utile pour rechercher des documents où une valeur de champ numérique, lorsqu’elle est divisée par un diviseur, laisse un reste spécifique. Il sert généralement à la pagination, aux données d’échantillonnage ou à la recherche de modèles dans des séquences numériques.

Syntaxe

La syntaxe de l’opérateur $mod est la suivante :

{
  <field>: { $mod: [ <divisor>, <remainder> ] }
}

Paramètres

Descriptif
<field> Champ sur lequel effectuer l’opération modulo. Le champ doit contenir des valeurs numériques.
<divisor> Nombre par lequel diviser la valeur du champ. Doit être un nombre positif.
<remainder> Reste attendu après l’opération modulo. Doit être un nombre non négatif inférieur au diviseur.

Exemple :

Exemple 1 : Rechercher des magasins avec des ventes divisibles par 1 000

L’exemple récupère les magasins où les ventes totales sont divisibles de 1 000 (utiles pour identifier les chiffres de ventes arrondies).

db.stores.find({
  "sales.totalSales": { $mod: [1000, 0] }
}).limit(2)

Cette requête identifie les magasins avec des chiffres de vente qui sont exactement des multiples de 1 000, ce qui peut indiquer des tarifs promotionnels ou des modèles de ventes en bloc.

  {
    "_id": "new-store-001",
    "name": "TechWorld Electronics - Downtown Branch",
    "sales": {
      "totalSales": 5000
    },
    "createdDate": "2025-06-11T11:11:32.262Z",
    "status": "new",
    "staff": {
      "totalStaff": {
        "fullTime": 0,
        "partTime": 0
      }
    },
    "version": 1
  },
  {
    "_id": "gaming-store-mall-001",
    "name": "Gaming Paradise - Mall Location",
    "location": {
      "lat": 35.6762,
      "lon": 139.6503
    },
    "createdDate": "2025-06-11T11:13:27.180Z",
    "status": "active",
    "staff": {
      "totalStaff": {
        "fullTime": 8,
        "partTime": 12
      },
      "manager": "Alex Johnson",
      "departments": [
        "gaming",
        "accessories",
        "repairs"
      ]
    },
    "sales": {
      "totalSales": 0,
      "salesByCategory": []
    },
    "operatingHours": {
      "weekdays": "10:00-22:00",
      "weekends": "09:00-23:00"
    },
    "metadata": {
      "version": 1,
      "source": "store-management-system"
    }
  }

Exemple 2 : Interrogation de style pagination

Recherchez les magasins où le nombre d’employés à temps partiel laisse le reste 0 lorsqu’il est divisé par 4 (utile pour créer des sous-ensembles de données).

db.stores.find({
  "staff.totalStaff.partTime": { $mod: [4, 0] }
})

Ce type de requête est utile pour créer des partitions de données cohérentes ou implémenter une logique de pagination personnalisée basée sur des valeurs de champ.

  {
    "_id": "new-store-001",
    "name": "TechWorld Electronics - Downtown Branch",
    "sales": {
      "totalSales": 5000
    },
    "createdDate": "2025-06-11T11:11:32.262Z",
    "status": "new",
    "staff": {
      "totalStaff": {
        "fullTime": 0,
        "partTime": 0
      }
    },
    "version": 1
  },
  {
    "_id": "gaming-store-mall-001",
    "name": "Gaming Paradise - Mall Location",
    "location": {
      "lat": 35.6762,
      "lon": 139.6503
    },
    "createdDate": "2025-06-11T11:13:27.180Z",
    "status": "active",
    "staff": {
      "totalStaff": {
        "fullTime": 8,
        "partTime": 12
      },
      "manager": "Alex Johnson",
      "departments": [
        "gaming",
        "accessories",
        "repairs"
      ]
    },
    "sales": {
      "totalSales": 0,
      "salesByCategory": []
    },
    "operatingHours": {
      "weekdays": "10:00-22:00",
      "weekends": "09:00-23:00"
    },
    "metadata": {
      "version": 1,
      "source": "store-management-system"
    }
  }