Операторы $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. Они позволяют эффективно фильтровать документы по наличию и типу полей, что упрощает поиск и обработку данных. Комбинируя эти операторы с другими операторами запросов, можно создавать сложные и точные запросы для извлечения необходимой информации.