Перевод: Paras — Learn MongoDB: Query Documents — I
Чтение или поиск документов — одна из важных операций. В MongoDB есть много вещей, которым мы должны научиться, чтобы находить нужные нам данные. В этом посте я расскажу обо всех типах операторов, которые mongodb может предложить для запроса документов.
Чтобы настроить mongodb, вы можете проверить мою публикацию о начале работы или официальную документацию.
Когда дело доходит до запросов данных, у нас есть два метода чтения.
В этом посте мы рассмотрим find, потому что принципы работы с обоими методами одинаковы, с той лишь разницей, что findOne возвращает только первый документ из найденных результатов.
Опять же, мы будем работать с базой данных pokeworld, созданной в предыдущем посте.
Новая структура документа в коллекции pokemons
{ name: "pikachu", type: "Electric", stats: { health: 40, attack: 50, defense: 45 }, level: 16, weakness: "ground", // this field can be empty in some documents evolution: "raichu", moves: [ {name: "quick attack", dmg: 40}, {name: "thunder bolt", dmg: 90}, {name: "irontail", dmg: 50} ] }
Такой структуры документа должно быть достаточно, чтобы помочь нам изучить различные способы запроса данных. Давайте начнем !
#найти покемонов травяного типа с 20 уровнем > db.pokemons.find({type: "Grass", level: 40}).pretty()
Встроенные документы — это объекты внутри документа. Например. stats в нашем документе. Используйте кавычки и . точку для запроса полей во встроенных документах.
# найти электрического покемона со здоровьем 40 > db.pokemons.find({type: "Electric", "stats.health": 40}).pretty()
Pretty () помогает отформатировать документ в оболочке, чтобы результаты были удобочитаемыми.
Когда дело доходит до запроса данных более сложным способом, нам нужно больше, чем просто простые запросы. У этого Mongo есть операторы, которые помогают нам создавать более сложные запросы.
Типы операторов:
В этом посте мы рассмотрим только операторы запросов. Нам доступны разные типы операторов.
Когда мы хотим сравнить данные в документах, например, меньше, больше, не равно, мы используем операторы сравнения.
$eq
, $ne
, $gt
, $gte
, $lt
, $lte
, $in
, $nin
# $eq, равно > db.pokemons.find({$eq: {"name": "pikachu"}}) # $ne (не равно), получить покемонов со здоровьем не равным 40 > db.pokemons.find({"stats.attack": {$ne: 40}}) # $gt (больше), $gte (больше, чем равно), # $lt(less than), $lte(less than equal) > db.pokemons.find({type: "grass", "stats.health": {$gte: 40, $lt: 60}}) # $in (включает), $nin (не включает) # найти покемонов со следующими показателями здоровья: 40, 45, 50 > db.pokemons.find({"stats.health": {$in: [40, 50, 45]}})
Логические операторы помогают нам строить логические утверждения, например И, ИЛИ, НИ, НЕ
$and
, $or
, $nor
, $not
$or : Он помогает нам, когда мы хотим, чтобы выполнялось одно из условий. При использовании этого оператора мы передаем 2 или более фильтров в массиве.
$nor : Это полная противоположность $or и может использоваться аналогичным образом для выполнения противоположности $or
# найти покемона с типом grass или electric и health 40 > db.pokemons.find({ health: 40, $or: [ {type: "grass"}, {type: "electric"} ] })
$and: также принимает массив фильтров и проверяет, все ли условия выполняются документом или нет.
# найти покемонов со здоровьем 40 и атакой 60 > db.pokemons.find({ $and: [ {"stats.health": 40}, {"stats.attack": 60} ] })
$not : используется, когда вы хотите инвертировать фильтр, т.е. делать противоположное тому, что делает фильтр..
# найти покемонов с защитой не выше 45 > db.pokemons.find({ "stats.defense": {$not: {$gt: 45}} }) # вы можете использовать оператор $eq с $not для случая "не равно".
Есть два оператора элемента. Они помогают нам работать с полями, а не с данными. Под этим я подразумеваю поля, например поля stats, type в документе о покемонах.
$exists
, $type
$exists : Поскольку структура документа mongodb не является жесткой и может пропускать некоторые поля в некоторых документах, нам иногда необходимо проверить, существует ли поле в документе или нет. Тогда в действие вступает оператор $ exists.
Если вы проверите пример структуры документа, который я дал в начале, вы увидите, что поле weakness
может быть пустым в некоторых документах, то есть его не существует в некоторых документах (какие-то суперпокемоны без слабых мест: p)
# найти покемонов, у которых есть слабое поле / ключ > db.pokemons.find({ weakness: {$exists: true}})
$type: Этот оператор помогает нам проверить тип поля в документе. Давайте узнаем о всех доступных типах в mongoDB, чтобы мы могли лучше использовать эти операторы. (Я выберу самые важные и наиболее часто используемые. Полный список можно посмотреть здесь)
# Допустим, вы вставили покемона в коллекцию # Вместо чисел вы вставили их как строку! # давайте найдем эти документы !! > db.pokemons.find({"stats.health": {$type: "string"}})
По умолчанию при хранении чисел mongodb использует тип «double».
Мы узнали много важных и полезных операторов, которые могут понадобиться для запроса данных в mongodb. В следующем посте я расскажу об остальных операторах (операторы вычисления и массивы).
Итак, пока все! Надеюсь, эта статья была вам полезна.
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…