MongoDB: $exists и $type — мощная фильтрация данных

Операторы $exists и $type в MongoDB позволяют эффективно фильтровать документы по наличию поля и его типу данных соответственно. Это мощные инструменты для точного поиска информации.

Оператор $exists

Оператор $exists используется для поиска документов, содержащих или не содержащих указанное поле. Значение true указывает на наличие поля, а false — на его отсутствие.

Примеры использования:

  • {"name": { $exists: true }} — найдет все документы, содержащие поле name.
  • {"name": { $exists: false }} — найдет все документы, не содержащие поле name.

Оператор $type

Оператор $type позволяет фильтровать документы по типу данных указанного поля. В MongoDB определены различные типы данных, каждый из которых имеет свой числовой код:

  • 1: Double
  • 2: String
  • 3: Object
  • 4: Array
  • 8: Boolean
  • 16: Date
  • 18: Null
  • 10: Int32
  • 11: Timestamp
  • 16: Binary data
  • 21: ObjectId
  • 13: DBPointer
  • 17: MinKey
  • 19: MaxKey

Обратите внимание, что код 16 используется для двух типов данных: Date и Binary data. Для однозначной идентификации типа данных рекомендуется использовать оператор $type в сочетании с другими операторами, например, $eq.

Примеры использования:

  • {"post": { $type: 2 }} — найдет все документы, где поле post имеет строковый тип.
  • {"time": { $type: 16 }} — найдет все документы, где поле time имеет тип Date или Binary data.
  • {"views": { $type: 4 }} — найдет все документы, где поле views является массивом.
  • {"index": { $type: 10 }} — найдет все документы, где поле index имеет тип Int32.
  • {"index": { $type: 1 }} — найдет все документы, где поле index имеет тип Double.
  • {"index": { $type: 10, $eq: 100 }} — найдет все документы, где поле index является целым числом (Int32) и равно 100.
  • {"index": { $type: 1, $eq: 5 }} — найдет все документы, где поле index является числом с плавающей точкой (Double) и равно 5.

Комбинирование операторов $exists и $type

Операторы $exists и $type можно комбинировать в одном запросе для более точного поиска. Например, можно найти все документы, содержащие поле name со строковым типом данных:

{"name": { $exists: true, $type: 2 }}

Примеры практического применения

  • Поиск документов, содержащих поле name и имеющих строковый тип: { name: { $exists: true, $type: 2 } }
  • Поиск документов, не имеющих поля age: { age: { $exists: false } }
  • Поиск документов, где поле date является датой: { date: { $type: 16 } } (Обратите внимание на неоднозначность кода 16).

Операторы $exists и $type — важные инструменты для работы с MongoDB. Они позволяют эффективно фильтровать документы по наличию и типу полей, что упрощает поиск и обработку данных. Комбинируя эти операторы с другими операторами запросов, можно создавать сложные и точные запросы для извлечения необходимой информации.

Что будем искать? Например,программа