Поделиться через


$mod (как оператор запроса)

Оператор $mod запроса используется для фильтрации документов на основе оставшейся части операции деления. Этот оператор позволяет запрашивать запросы, включающие математические условия, например поиск значений, делимых по числу или с определенным остатком. Она поддерживается в Azure Cosmos DB для MongoDB (vCore).

Синтаксис

{ 
  <field>: { $mod: [ <divisor>, <remainder> ] } 
}
  • <field>: поле, в котором выполняется операция модуля.
  • <divisor>: число, по которому необходимо разделить значение поля.
  • <remainder>: Ожидаемый оставшийся после деления.

Пример

Пример 1. Поиск документов, в которых sales значение делится на 3

db.collection.find({ "sales": { "$mod": [3, 0] } })

В этом примере извлекаются все документы, в которых sales значение поля делится на 3 (то есть остаток равен 0). При этом будут выведены следующие выходные данные:

[
  { "_id": 1, "sales": 9, "product": "A" },
  { "_id": 2, "sales": 15, "product": "B" },
  { "_id": 3, "sales": 21, "product": "C" }
]

Пример 2. Поиск документов, в которых totalSales значение имеет оставшуюся часть 2 при делении на 5

db.collection.find({ "totalSales": { "$mod": [5, 2] } })

Этот запрос фильтрует документы, в которых totalSales поле имеет оставшуюся часть 2 при делении на 5. При этом будут выведены следующие выходные данные:

[
  { "_id": 4, "totalSales": 7, "product": "X" },
  { "_id": 5, "totalSales": 12, "product": "Y" },
  { "_id": 6, "totalSales": 17, "product": "Z" }
]

Пример 3. Запрос вложенных полей с помощью $mod

db.collection.find({ "sales.monthly.total": { "$mod": [4, 1] } })

В этом примере демонстрируется запрос вложенного поля (sales.monthly.total) с $mod помощью оператора. При этом будут выведены следующие выходные данные:

[
  { "_id": 7, "sales": { "monthly": { "total": 5 } }, "category": "Electronics" },
  { "_id": 8, "sales": { "monthly": { "total": 9 } }, "category": "Clothing" }
]

Соображения

  • Если в массиве для оператора $mod задано меньше двух значений, то на сервере возникает ошибка, указывающая, что недостаточно аргументов было передано.
  • Если в массиве для оператора $mod задано более двух значений, то на сервере возникает ошибка, указывающая, что было передано слишком много аргументов.

Ограничения

  • Оператор $mod применяется только к числовым полям. Использование его в нечисловых полях приводит к ошибке.
  • Убедитесь, что делитель не равен нулю, так как приводит к недопустимой операции.