Бесплатное видеоруководство по техническим основам MongoDB (всего 14 эпизодов)

MongoDB

Предыдущий курс был посвящен Koa2.Чтобы бросить вызов фулстеку, нужно разобраться с базой данных.Лично мне, как фронтенд-разработчику, удобнее работать с MongoDB. Поскольку это база данных NoSql, нет необходимости писать операторы SQL, а внутреннее использование осуществляется в виде объектов JSON. Таким образом, мы проверили курс MongoDB в середине курса Koa2, и после того, как мы будем работать с базой данных, мы вернемся, чтобы изучить подключение к базе данных и работу Koa2.

Здесь я узнал о последней версии MongoDB, которая теперь является версией 3.6.

проиллюстрировать:Курс обновляется 2-3 раза в неделю, и каждое занятие длится около 12 минут, потому что я думаю, что могу удерживать внимание только 12-15 минут каждый раз, когда слушаю занятие (обычно я встаю в 4 утра и начать обновление, которое глупее других. Работать больше, чем другие), и обновить его в виде видео и графики.

Технический жир не штатный лектор, а программист первой линии, поэтому неизбежны ошибки и упущения в курсе.Надеюсь, что друзья укажут в сообщении, давайте вместе добиваться прогресса . Курс относится к MongoDB Definitive Guide 2nd Edition.

Получите оффлайн-видео высокой четкости, оставьте свой почтовый ящик, и оно будет бесплатно предоставлено вам по электронной почте.

ваше имя (обязательно)

Ваш адрес электронной почты (обязательно)

Раздел 01: Понимание и установка MongoDB

Все знают, что MongoDBнереляционные базы данных,Чтобы понять нереляционные базы данных, вы должны сначала понять реляционные базы данных.Реляционные базы данных — это базы данных, основанные на реляционной модели. Более известные реляционные базы данных, такие как Oracle, DB2, MSSQL, Mysql.

В чем разница между нереляционной базой данных и реляционной базой данных?

  • вещество:Суть нереляционных баз данных: Продукты нереляционных баз данных представляют собой функционально кастрированные версии традиционных реляционных баз данных, которые значительно повышают производительность продукта за счет сокращения неиспользуемых или редко используемых функций.
  • цена:Текущие нереляционные базы данных в основном бесплатны, в то время как более известные реляционные базы данных, такие как Oracle, DB2, MSSQL, платные. Хотя MySql бесплатен, он по-прежнему требует много работы для предварительной обработки больших данных.
  • Функция:В реальной разработке многие бизнес-требования фактически не требуют полных функций реляционной базы данных, и функций нереляционных баз данных достаточно. В этом случае, безусловно, разумнее использовать нереляционную базу данных с более высокой производительностью и меньшей стоимостью.

После понимания разницы между реляционными базами данных и нереляционными базами данных необходимо найти компромисс.Не рекомендуется использовать нереляционные базы данных для более сложных и масштабных проектов, но если вы хотите вести блог, бизнес-логика систем CMS не сложна.программа, MongoDB вполне способна.

Введение в MongoDB:

MongoDB — это база данных, основанная на распределенном файловом хранилище, написанная на языке C++. Цель состоит в том, чтобы предоставить расширенное высокопроизводительное решение для хранения данных для веб-приложений. MongoDB — это продукт между реляционными и нереляционными базами данных, наиболее многофункциональный и наиболее похожий на реляционные базы данных среди нереляционных баз данных. Структура данных, которую он поддерживает, очень свободна и представляет собой формат bson, подобный JSON, поэтому он может хранить более сложные типы данных. Самая большая особенность Mongo заключается в том, что поддерживаемый им язык запросов является очень мощным.Его синтаксис несколько похож на объектно-ориентированный язык запросов.Он может почти реализовать большинство функций, подобных однотабличным запросам в реляционных базах данных, а также поддерживает индексирование. данных.

 

Установите MongoDB:

Установка MongoDB разделена на установку Windows и установку Mac (конвергенция Liunx и Mac). Здесь мы объясняем только установку Windows (не спрашивайте меня, почему, как вы все знаете, у меня нет Mac).

шаги установки:

  1. Перейдите на официальный сайт, чтобы скачать MongoDB,www.mongodb.com/, нашел на сайтеКнопка загрузки. Загрузка будет немного загружена, вы знаете, иностранные серверы.
  2. После загрузки и установки установка не представляет сложности, но рекомендуется выбрать установку по умолчанию для новичков, а не настраивать ее самостоятельно. Подождите, пока мы полностью не ознакомимся с ним, прежде чем настраивать конфигурацию.
  3. Если во время установки есть защитное программное обеспечение, оно сообщит о каком-то перехвате, и его можно разрешить, если это не разрешено, установка завершится ошибкой.
  4. После завершения установки необходимо настроить «переменную среды», цель — использовать ее прямо в командной строке, не вводя длинный путь. (Посмотрите видео об этом шаге)

Запустите сервер MongoDB:

После установки базы данных MongoDB нам нужно разрешить серверу использовать ее. Команда для включения службы: Mongod.

  1. Откройте командную строку:Сначала откройте «Выполнить» (сочетание клавиш Win + R), затем введите cmd и нажмите Enter, чтобы открыть инструмент командной строки.
  2. Выполнить монгод:Введите mongod прямо в команду, но вы обнаружите, что служба не запущена, сообщается об исключении и служба останавливается.
  3. новая папка:Вышеупомянутая ошибка возникает из-за того, что у нас нет папок, которые необходимы Mongodb для возобновления работы, обычно это корневой каталог установочного диска, создайте data/db, эти две папки.
  4. Запустить монгод:В это время сервис может быть открыт, а порт ссылки по умолчанию — 27017.

Сервис ссылок:

После того, как сервер включен, мы можем использовать командную строку для подключения сервера.mongo. Снова откройте инструмент командной строки и введите команду mongo. Возможно, вы сообщите о нескольких предупреждениях при ссылке, нас это не волнует, мы узнаем позже.

Проверьте существующую команду базы данных:show dbs

Проверьте команду версии базы данных:db.version()

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

Раздел 02: Основные команды Mongo-1

В следующих нескольких разделах вы можете начать работу непосредственно с командами Mongo. Пусть ваши друзья сначала используют основные команды MongoDB, что является быстрым началом. После быстрого начала мы будем использовать последующие курсы для уточнения и обновления этих команд, чтобы сформировать полную систему знаний MongoDB. Не волнуйтесь, ребята, давайте начнем учиться.

mongo shell

Если вы уже сталкивались с базами данных, вы должны знать, что каждая база данных имеет свои собственные уникальные команды.MSSQL и MYsql используют команды Sql, а рабочие команды MongoDB наиболее знакомы внешнему интерфейсу.JavaScript-команды. Вы должны быть немного взволнованы, увидев это как внешний интерфейс, который отлично подходит для внешнего интерфейса.

Давайте сначала познакомимся с общей командой присваивания и вывода. (Вам нужно открыть сервер Mongo и подключиться к серверу перед операцией — то есть командой mongod и командой mongo, о которой мы говорили в предыдущем уроке) Введите следующий код в командную строку.

var x='Hello World'
print(x)

Следует отметить, что вывод здесь больше не использует console.log('Barabara'), а print('Barabara'), что немного отличается.

Вы также можете определить функции:

function jspang(){
    return 'JSPang';
}

Узнав здесь, мы используем синтаксис JavaScript, который мы можем легко понять, очень легко.

Структура хранилища MongoDB

В прошлом структура данных нашей реляционной базы данных была такова, что верхний уровень — это библиотека, нижний уровень библиотеки — это таблица, а нижний уровень таблицы — это данные. Но MongoDB отличается.Под библиотекой находится коллекция, а под коллекцией файл.Вы можете посмотреть на следующую картинку, чтобы понять.

В обучении мы можем сравнить память, чтобы мы могли лучше понять эти термины.На самом деле таблица данных - это коллекция, а строка данных - это файл.Конечно, это только для памяти, и суть все же в другом.

Основа команды Shell:

После понимания структуры хранилища вы можете приступить к изучению наших основных команд оболочки.Поскольку эти команды относительно просты, я покажу их в виде списка.Конкретное использование можно посмотреть в видео.

  • show dbs: Показать существующую базу данных. Если вы только что установили ее, по умолчанию будет локальная и административная (конфигурация). Это база данных MongoDB по умолчанию. Мы не разрешаем использовать эти имена при создании новой базы данных.
  • use admin: ввод данных можно также понимать как использование базы данных. Успех будет отображаться: переключен на администратора базы данных.
  • show collections: Отображает коллекцию в базе данных (называется таблицей в реляционном типе, мы должны постепенно знакомиться с ней).
  • db: Отображение текущего местоположения, т. е. имени базы данных, которую вы используете в данный момент.Эта команда используется чаще всего, поскольку вы должны проверить библиотеку, в которой находитесь, прежде чем выполнять какую-либо операцию, чтобы избежать ошибок при выполнении.

Суммировать:Обучение этого урока вошел в мир MongoDB. Вы почувствуете, что он все еще относительно просты, все основные заказы, вы можете использовать его, но каждый должен делать больше. В центре внимания этого класса является преобразование идеи предыдущих структур хранения данных о запасах данных и структуре хранения MOGSODB.

Раздел 03: Основные команды Mongo — 2

Этот урок продолжает изучение основных команд MongoDB.На прошлом уроке мы изучили некоторые из самых простых команд просмотра, таких как просмотр базы данных, просмотр коллекции и отображение текущего местоположения. На этом занятии мы начнем работать с данными в реальной жизни и изучим основные операции по добавлению, удалению и изменению данных. Просто смотрите видео и начинайте учиться.

Основные команды обработки данных:

  • использовать db (создать базу данных):use может не только войти в базу данных, но и помочь вам создать библиотеку, если введенная вами библиотека не существует. Но до того, как нет набора, по умолчанию он по-прежнему пуст.
  • db.коллекция.insert(): Создать новую коллекцию данных и вставить файл (данные).Если коллекции не существует, вы можете создать новую коллекцию и вставить в нее данные. Демонстрация: db.user.insert({"name":"jspang"})
  • db.коллекция.find(): Запросите все данные, эта команда выведет список всех данных в коллекции, вы можете видеть, что MongoDB автоматически добавила нам значения индекса. Демонстрация: db.user.find()
  • db.коллекция.findOne(): Запросите данные первого файла.Здесь следует отметить, что все объединенные слова MongoDB используют регистр верблюда с первой буквой в нижнем регистре.
  • db.collection.update({запрос},{изменить}): изменить данные файла, первое — это условие запроса, а второе — значение, которое нужно изменить. Обратите внимание, что здесь можно добавить больше элементов данных файла, например, в следующем примере.

db.jspang.update({"name":"jspang"},{"name":"jspang","age":"32"})

  • db.collection.remove(условие): Удалить данные файла, обратите внимание на выполнение условия. Демонстрация: db.user.remove({"name":"jspang"})
  • db.коллекция.drop(): Удалить всю коллекцию.Это следует использовать с осторожностью в реальной работе.Если это программа, она должна быть подтверждена дважды.
  • db.dropDatabase( ): Удалить всю базу данных.При удалении библиотеки обязательно сначала войти в базу данных, а затем удалить ее. В реальной работе это в основном не используется, в реальной работе может потребоваться сохранение данных и трассировок.

Суммировать:Этот класс полностью посвящен операциям с данными или библиотеками.Хотя они просты, вы будете использовать их каждый день, поэтому рекомендуется многократно практиковаться, чтобы улучшить память.

Раздел 04: Написание команд mongo с файлами js

Команду (шелл) монго писать в командной строке слишком хлопотно (всё равно технический жир терпеть не может командную строку системы windows), срочно нужно как лучше работать, будем учиться это в этом уроке Используйте файлы JS для написания команд оболочки и их выполнения. Большинство команд оболочки для написания монго на JS одинаковы, отличаются лишь некоторые.

Напишите команду в JS:

Теперь смоделируйте информацию из таблицы журнала входа пользователя и запишите ее на JS. Создайте новый файл goTask.js во вновь созданном каталоге, например D:/mongoShell/. Содержимое файла следующее:

файл goTask.js

var userName="jspang";    //声明一个登录名             
var timeStamp=Date.parse(new Date());     //声明登录时的时间戳  
var jsonDdatabase={"loginUnser":userName,"loginTime":timeStamp}; //组成JSON字符串
var db = connect('log');   //链接数据库
db.login.insert(jsonDdatabase);  //插入数据
 
print('[demo]log  print success');  //没有错误显示成功

Если приведенный выше базовый код не кажется вам таким простым, то я предлагаю вам сначала прекратить изучение этого курса и изучить основы JS, Только когда фундамент будет прочным, вы сможете быстро учиться.

Выполнить JS-файл

После написания файла JS вам необходимо выполнить его, чтобы увидеть, есть ли проблема с файлом и можно ли успешно вставить данные в MongoDB.

Выполнение на самом деле очень простое, просто используйте mongo xxx.js (xxx — это файл goTask.js, который мы написали).

mongo goTask.js

Затем мы можем увидеть в командной строке, что выполнение прошло успешно, и мы можем перейти к терминалу, чтобы просмотреть результат вставки.

Суммировать:Этот класс очень хорошо решил проблему написания командных строк в терминале.Хотя большинство шеллов пишется так же как и в командной строке, но они тоже немного отличаются.Надеюсь вы легко их освоите.

Раздел 05: Правильный способ массовой вставки

В первых 4 уроках мы кратко объяснили использование MongoDB с целью быстрого начала работы. Начиная с этого класса, мы подробно объясним различные операции MongoDB, и сложность будет постепенно увеличиваться. Нужно напомнить, что если вы не знакомы с предыдущими курсами, вам следует сначала попрактиковаться, иначе следующее обучение будет немного затруднено.

Есть две возможности, о которых следует помнить при манипулировании базами данных:

  • Во-первых, это быстрая емкость памяти.
  • Во-вторых, возможность легко и быстро делать запросы.

Объемная вставка:

Массовая вставка данныхмножествообразом (если вы ошибетесь, вы можете вырезать его с помощью 3 возвратов каретки). Теперь мы вводим следующий код в командной строке и видим, что данные вставляются плавно.

db.test.insert([
    {"_id":1},
    {"_id":2},
    {"_id":3}
])

Старая версия MongoDB (в основном необходимая для версий до 3.2) требует добавления пакетного слова перед вставкой, как показано в следующем коде.

db.test.batchInsert([
    {"_id":1},
    {"_id":2},
    {"_id":3}
])

Обратите внимание на одну вставкуНе превышайте 48M, старайтесь использовать статическое хранилище для .zip и больших изображений, а MongoDB максимально хранит статические пути, это тоже правило.

Тест производительности массовой вставки

Я только что изучил пакетную вставку, это быстрая вставка цикла? Или пакетная вставка быстрая что ли? В общечеловеческом сознании пакетная вставка однозначно быстрее (на самом деле в этом нет никаких сомнений), но надо излить дух гика, изучить детали и попробовать написать небольшую оболочку для проверки результатов.

НапишициклМетод вставки:

var startTime = (new Date()).getTime(); //得到开始时间
var  db = connect('log');  //链接数据库
//开始循环
for(let i=0;i<1000;i++){
    db.test.insert({num:i});
}
 
var runTime = (new Date()).getTime()-startTime;//计算时间差
print ('This run this is:'+runTime+'ms');//打印出来

Время, которое я тестировал, составило 507 мс. Хотя эта скорость связана с производительностью компьютера, она все же не идеальна: на 1000 единиц данных уходило почти полсекунды, и руководитель группы сходил с ума.

Массовая вставка кода:

var startTime = (new Date()).getTime();
var  db = connect('log');
 
 
var tempArray = []              //声明一个数组
for(let i=0;i<1000;i++){        //循环向数组中放入值
    tempArray.push({num:i});
}
db.test.insert(tempArray)       //批量一次插入
 
var runTime = (new Date()).getTime()-startTime;
print ('This run this is:'+runTime+'ms');

На этот раз это заняло 17 мс, и производительность намного лучше, чем вставка цикла.

Суммировать: На работе вы должны заботиться о производительности базы данных.Это тоже ваш уровень достижений.Освоить технологию очень просто, но не так просто ее освоить. Изучив этот раздел, помните, что если вставка циклов и пакетная вставка не работают, выберите пакетную вставку, это даст нам лучшую производительность.

Раздел 06: Модификация: Обновление распространенных ошибок

В начале этого занятия мы поговорим о подробной работе с обновлением.Давайте рассмотрим распространенные ошибки.Мы знаем трудности или где проблемы, а затем предложим решения. В этом уроке я сначала покажу некоторые неправильные методы обновления, а затем правильные. Надеюсь, вы не вводите в заблуждение, ребята.

Ошибка 1: обновлять только измененные элементы

Если у вас есть опыт работы с реляционными базами данных, вы можете легко изменить только один элемент, который необходимо изменить, потому что именно так это делается в реляционных базах данных. Давайте сначала подготовим некоторые данные, которые имитируют состав команды разработчиков программного обеспечения (конечно, это нельзя воспринимать всерьез).

var workmate1={
    name:'JSPang',
    age:33,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        SkillTwo:'JavaScript',
        SkillThree:'PHP'
    },
    regeditTime:new Date()
}
 
var workmate2={
    name:'ShengLei',
    age:30,
    sex:1,
    job:'JAVA后端',
    skill:{
        skillOne:'HTML+CSS',
        SkillTwo:'J2EE',
        SkillThree:'PPT'
    },
    regeditTime:new Date()
}
 
var workmate3={
    name:'MinJie',
    age:20,
    sex:1,
    job:'UI设计',
    skill:{
        skillOne:'PhotoShop',
        SkillTwo:'UI',
        SkillThree:'Word+Excel+PPT'
    },
    regeditTime:new Date()
}
 
var db=connect('company')
var workmateArray=[workmate1,workmate2,workmate3]
db.workmate.insert(workmateArray)
print('[SUCCESS]: The data was inserted successfully.');

В приведенном выше коде мы вставили 3 части данных в базу данных в виде файлов.

В это время я вдруг обнаружил, что пол позиции пользовательского интерфейса был неверным. Изначально она была красивой женщиной, но было написано как мужчина. Нам нужно изменить эти данные, но это часто пишется так.

var db=connect('company')
db.workmate.update({name:'MinJie'},{sex:0})
 
print('[update]: The data was updated successfully');

Проблема с этим написанием заключается в том, что нашим последним фрагментом данных становится только секс:0, а все остальные данные теряются, а это определенно не то, что нам нужно. Это ошибка, которую часто допускают новички, работая с модификациями базы данных, то есть модифицируя только измененные данные.

Правильный метод модификации:

Вы можете объявить переменную, затем поместить всю информацию для изменения данных в переменную и, наконец, выполнить операцию модификации.

var db=connect('company')
 
var workmate3={
    name:'MinJie',
    age:20,
    sex:0,
    job:'UI设计',
    skill:{
        skillOne:'PhotoShop',
        SkillTwo:'UI',
        SkillThree:'Word+Excel+PPT'
    },
    regeditTime:new Date()
}
db.workmate.update({name:'MinJie'},workmate3)
 
 
print('[update]: The data was updated successfully');

В это время вам нужно удалить (db.workmate.drop()) данные в таблице, потому что пользователя MinJie больше нет в базе данных, а затем повторно использовать метод загрузки для загрузки вставленных данных, а затем изменить Это.

//执行命令如下:
db.workmate.drop()
load('./demo02.js')
load('./demo03.js')

Теперь этот метод правильный, и модификация данных нормальна, но вы обнаружите, что писать очень хлопотно, и особенно легко написать неправильно. На следующем уроке мы познакомим вас с модификатором обновления, который может очень хорошо решить эту проблему.

Раздел 07: Модификации: первый взгляд на модификатор обновления

Модификация последнего класса действительно недостаточно элегантна для использования, что неприемлемо для нашего большого фронтенда, так что нам приходится изучать новые знания.модификатор обновления, Для решения этой проблемы. Модификатор обновления может помочь нам быстро и легко изменять данные, делая наши операции проще и удобнее.

$установить модификатор

Он используется для изменения заданного значения ключа (ключа).В это время нам очень удобно изменить пол и возраст предыдущего урока.Это можно сделать всего одним предложением.

db.workmate.update({"name":"MinJie"},{"$set":{sex:2,age:21}})

После модификации мы можем использовать db.workmate.find() для просмотра, вы обнаружите, что данные были изменены.

Изменить вложенный контент (встроенные документы)

Например, текущие навыки пользовательского интерфейса изменились, говоря, что она не делает PPT, но очень хорошо делает слова, и их нужно изменить. В это время вы обнаружите, что данные о навыках встроены.В это время мы можем изменить их в виде атрибутов.skill.skillThree. Подробности см. в приведенном ниже коде.

db.workmate.update({"name":"MinJie"},{"$set":{"skill.skillThree":'word'}})

Это упрощает изменение встроенных документов.

$unset используется для удаления ключа

Его роль на самом деле заключается в удалении ключевого значения и ключа. Обычно девушки не хотят видеть свой возраст, поэтому мы просим нас удалить возраст. На данный момент мы можем использовать форму $unset.

db.workmate.update({"name":"MinJie"},{$unset:{"age":''}})

После того, как вы удалите его, если вы хотите добавить его обратно, вы можете добавить его непосредственно с помощью set.

$inc выполняет вычисления с числами

Это модификация значения, но модификация должна быть числом, а строка не имеет никакого эффекта. Теперь мы хотим вычесть 2 года из возраста МиДжи, чтобы мы могли напрямую использовать $inc для работы.

db.workmate.update({"name":"MinJie"},{$inc:{"age":-2}})

многовариантный

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

db.workmate.update({},{$set:{interset:[]}})

В это время вы используете db.workmate.find() для поиска, вы обнаружите, что только первые данные были изменены, а два других не изменились. В настоящее время мы хотим изменить мультивариант.

db.workmate.update({},{$set:{interset:[]}},{multi:true})

На данный момент все данные изменились. Multi имеет два значения, ture и false. True означает все изменения, а false означает только одно изменение (значение по умолчанию).

опция upsert

Upsert заключается в том, чтобы вставить эти данные напрямую, когда значение не найдено. Например, у нас в это время появился новый коллега XiaoWang, мы модифицируем его информацию в это время, и возраст выставлен на 20 лет, но таких данных в коллекции нет. В настоящее время вы можете использовать опцию upsert для прямого добавления.

db.workmate.update({name:'xiaoWang'},{$set:{age:20}},{upsert:true})

upsert также имеет два значения: true для добавления, если нет, false для отказа от добавления (значение по умолчанию).

Суммировать:Этот класс имеет много контента, в основном изучая некоторые вещи, связанные с модификатором обновления. Обязательно попрактикуйтесь несколько раз после занятий, иначе вы скоро забудете об этом.

Раздел 08: Модификация: модификатор обновления массива

Мы уже изучили некоторые базовые модификаторы.В этом уроке мы в основном изучаем работу модификаторов массива.Конечно, мы также можем модифицировать встроенные документы, то есть данные в виде объектов. Давайте учиться усердно.

$push добавить массив/значение встроенного документа

Функция $push заключается в добавлении значения в массив, но мы также часто используем его для управления встроенным стабильным документом, который является значением типа объекта {}. Давайте сначала рассмотрим способ добавления значений массива, например, мы хотим добавить хобби (интерсет) Сяо Вану для рисования (draw):

db.workmate.update({name:'xiaoWang'},{$push:{interest:'draw'}})

Конечно, модификатор $push также может повысить ценность встроенного документа. Например, сейчас мы собираемся добавить новый навык skillFour для рисования в наш пользовательский интерфейс. На данный момент мы можем работать следующим образом:

db.workmate.update({name:'MinJie'},{$push:{"skill.skillFour":'draw'}})

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

$ne, чтобы узнать, существует ли он

Его основная функция состоит в том, чтобы проверить, существует ли значение. Если оно не существует, а затем выполнить операцию, она не будет выполнена, если она существует. Это легко изменить. Я помню, что когда я только учился, я часто менял роль этого модификатора и добавил себе.Много ям.

Пример: если хобби (интерес) xiaoWang не имеет значения playGame, мы добавим хобби Game.

db.workmate.update({name:'xiaoWang',"interest":{$ne:'playGame'}},{$push:{interest:'Game'}})

Резюме: если нет, измените его, если есть, не изменяйте его.

$addToSet Обновленная версия $ne

Это модернизированная версия $ne (проверьте, существует ли, нажмите, если нет), и она более интуитивно понятна и удобна в работе, поэтому используется в работе чаще, чем $en.

Пример: Надо посмотреть, есть ли чтение (Интерес), нет ли интереса к чтению (Чтение).

db.workmate.update({name:"xiaoWang"},{$addToSet:{interest:"readBook"}})

$каждая партия добавляется

Он может передавать массив и добавлять несколько значений за раз, что эквивалентно пакетной операции, и его производительность также намного лучше, чем циклическая операция.Это то, на что мы должны обратить внимание.В работе это должно быть сначала объединяются в массив, а затем работают в пакетной форме.

Пример: теперь мы собираемся добавить в xiaoWang сразу три хобби: пение (Sing), танцы (Dance) и программирование (Code).

var newInterset=["Sing","Dance","Code"];
db.workmate.update({name:"xiaoWang"},{$addToSet:{interest:{$each:newInterset}}})

 

$pop удаляет значение массива

$pop удаляет только один раз, а не все значения в массиве. И у него есть два варианта, один 1 и -1.

  • 1: удалить с конца массива
  • -1: удалить с начала массива

Пример: Теперь нужно удалить хобби xiaoWang (код).

db.workmate.update({name:'xiaoWang'},{$pop:{interest:1}})

Модификация позиционирования массива

Иногда мы знаем только, какой бит массива нужно модифицировать, но не знаем, что это такое.В этом случае мы можем использовать интересующую форму.int.

Например, сейчас мы собираемся изменить третий процент xiaoWang на код (Код), Обратите внимание, что счет здесь начинается с 0.

db.workmate.update({name:'xiaoWang'},{$set:{"interest.2":"Code"}})

 

Суммировать:В этом классе в основном рассказывается об модификаторах обновления, связанных с массивами и встроенными документами, там много контента, который требует постоянного запоминания. Конечно, если вы не можете вспомнить, вы хотя бы помните URL этого блога, потому что технический жир уже организовал заметки за вас.

Раздел 09: Модификация: Государственный возврат и безопасность

При работе с базой модификация данных требует достаточных мер безопасности, фактически в реальной работе мы используемdb.collections.updateВремени не так много.При модификации будем использовать findAndModify.Он может вернуть нам некоторые необходимые параметры,что позволит нам иметь намного больше контроля над модификацией.Усиление контроля это еще и усиление безопасности.

Ответ написать:

Прежде чем мы начнем изучать код, давайте сначала разберемся с концепцией: реактивное письмо. В предыдущих статьях все наши операции были безответными записями, то есть после работы с базой данных она не давала нам никакого ответа или возвращаемого значения, но мы писали предложение, чтобы утешить себя (print('[update]:The data был успешно обновлен');). В работе это запрещено, потому что результат нашей модификации вообще нельзя вывести.

ОтзывчивыйЗапись напрямую вернет нам результат (отчет), и в результате будет много элементов, так что мы сможем контролировать программу и хорошо обращаться с механизмом безопасности. Это немного похоже на то, как внешний интерфейс вызывает внутренний интерфейс, несмотря ни на что, внутренний интерфейс должен дать мне несколько статусных слов.

db.runCommand( ):

Это исполнитель команд запуска базы данных, и это первый выбор для выполнения команд, поскольку он обеспечивает согласованный интерфейс между оболочкой и драйвером. (Почти все операции, которые работают с базой данных, можно выполнить с помощью runCommand.) Теперь давайте попробуем использовать runCommand для изменения базы данных и посмотрим, отличается ли результат от прямого использования db.collections.update.

db.workmate.update({sex:1},{$set:{money:1000}},false,true)
var resultMessage=db.runCommand({getLastError:1})
printjson(resultMessage);

В приведенном выше коде мы изменили данные всех мужчин, каждый человек добавил 1000 юаней (денег), а затем выполнил это с помощью db.runCommand(), вы можете видеть, что результат выполнения возвращается в консоль.

{
        "connectionId" : 1,
        "updatedExisting" : true,
        "n" : 2,
        "syncMillis" : 0,
        "writtenTo" : null,
        "err" : null,
        "ok" : 1
}

  • false: Ложь в конце первого предложения — это аббревиатура upsert, что означает, что она не будет увеличиваться, когда таких данных нет;
  • true: true — это аббревиатура от multi, что означает изменять все, эти два мы изучили в предыдущем курсе.
  • getLastError:1 : Указывает, что функция возврата неверна. Здесь много параметров. Если вам интересно, пожалуйста, найдите и изучите сами. Я не буду вводить здесь слишком много.
  • printjson: указывает вывод на консоль в формате объекта json.

db.listCommands(): просмотреть все команды Commad, контента много, в этом наборе курсов объясняется только тот контент, который часто используется в работе.

Например, если мы хотим проверить, успешно ли установлено соединение с базой данных, мы можем использовать команду Command.

db.runCommand({ping:1})

Возврат ok: 1 означает, что ссылка нормальная.

findAndModify:

Как видно из названия, findAndModify означает найти и изменить. Настройте его так, чтобы он возвращал нам измененный результат после модификации. Давайте сначала посмотрим на следующий код:

var myModify={
    findAndModify:"workmate",
    query:{name:'JSPang'},
    update:{$set:{age:18}},
    new:true    //更新完成,需要查看结果,如果为false不进行查看结果
}
var ResultMessage=db.runCommand(myModify);
 
printjson(ResultMessage)

Производительность findAndModify не так хороша, как при использовании напрямую db.collections.update, но в практической работе используется, ведь безопасность коммерческих программ все-таки важнее.

Значение свойства findAndModify:

  • query: Условия/документы, которые необходимо запросить
  • sort: приводить в порядок
  • remove: [boolean] Удалять ли найденный документ, введите true в качестве значения, и его можно будет удалить.
  • new:[boolean] Возвращает документ до обновления или документ после обновления.
  • fields: Поля, которые должны быть возвращены
  • upsert: Нет, увеличивается ли это значение.

 

Резюме: Этот курс охватывает некоторые операции, связанные с безопасностью, но это еще не все, и мы продолжим узнавать больше по ходу курса. Попробуйте использовать findAndModify для обновления данных на работе, это будет безопаснее и интуитивно понятнее, а потеря производительности того стоит.

Раздел 10: Запрос: модификатор неравенства для поиска

Операцию поиска MongoDB мы разделим на несколько курсов, потому что контента еще много, а поиск — наиболее прикладная операция в разработке, и будет использоваться почти каждый модуль, поэтому поисковая часть будет в центре внимания этого набора Конечно.Самый тяжелый. В этом уроке давайте рассмотрим простые условия запроса и узнаем об основном использовании find. Если вы раньше работали с реляционными базами данных, такими как MySql, вы будете знакомы с > (больше),

Данные конструкции:

Нам нужно добавить больше данных в коллекцию, чтобы мы могли хорошо объяснить условия запроса. Вы можете напрямую скопировать и добавить следующий код. Конечно, вы также можете добавить некоторые данные в коллекцию по желанию, главное, чтобы нам было удобно учиться.

var workmate1={
    name:'JSPang',
    age:33,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
        skillThree:'PHP'
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate2={
    name:'ShengLei',
    age:31,
    sex:1,
    job:'JAVA后端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'J2EE',
        skillThree:'PPT'
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate3={
    name:'MinJie',
    age:18,
    sex:0,
    job:'UI',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'UI',
        skillThree:'PPT'
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate4={
    name:'XiaoWang',
    age:25,
    sex:1,
    job:'UI',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'UI',
        skillThree:'PPT'
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate5={
    name:'LiangPeng',
    age:28,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate6={
    name:'HouFei',
    age:25,
    sex:0,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate7={
    name:'LiuYan',
    age:35,
    sex:0,
    job:'美工',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'CAD',
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate8={
    name:'DingLu',
    age:20,
    sex:0,
    job:'美工',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'CAD',
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate9={
    name:'JiaPeng',
    age:29,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
        skillThree:'PHP'
    },
    regeditTime:new Date(),
    interest:[]
}
var workmate10={
    name:'LiJia',
    age:26,
    sex:0,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
        skillThree:'PHP'
    },
    regeditTime:new Date(),
    interest:[]
}
var db=connect('company');
var workmateArray=[workmate1,workmate2,workmate3,workmate4,workmate5,workmate6,workmate7,workmate8,workmate9,workmate10];
db.workmate.insert(workmateArray);
print('[SUCCESS]:The data was inserted successfully');

Простой поиск:

Например, теперь мы хотим найти в данных всех, у кого есть навыки работы с HTML+CSS. Затем мы можем напрямую искать и добавлять условия.

db.workmate.find({"skill.skillOne":"HTML+CSS"})

В настоящее время мы не можем использовать загрузку для загрузки. Позже я расскажу вам, какой метод следует использовать. Здесь мы сначала воспользуемся глупым методом, а затем воспользуемся методом вставки и копирования для выполнения.

поле фильтра

Теперь возвращаемых элементов данных слишком много, они слишком беспорядочны, и иногда нашей программе не нужно так много опций. Например, нам нужны только имя и навыки. В это время нам нужно написать второй параметр, см. следующий код.

db.workmate.find(
    {"skill.skillOne":"HTML+CSS"},
    {name:true,"skill.skillOne":true}
)

В терминале вы увидите следующий результат:

{ "_id" : ObjectId("5a611350c4e36dee6008987a"), "name" : "JSPang", "skill" : { "skillOne" : "HTML+CSS" } }
{ "_id" : ObjectId("5a611350c4e36dee6008987b"), "name" : "ShengLei", "skill" : { "skillOne" : "HTML+CSS" } }
{ "_id" : ObjectId("5a611350c4e36dee6008987e"), "name" : "LiangPeng", "skill" : { "skillOne" : "HTML+CSS" } }
{ "_id" : ObjectId("5a611350c4e36dee6008987f"), "name" : "HouFei", "skill" : { "skillOne" : "HTML+CSS" } }
{ "_id" : ObjectId("5a611350c4e36dee60089882"), "name" : "JiaPeng", "skill" : { "skillOne" : "HTML+CSS" } }
{ "_id" : ObjectId("5a611350c4e36dee60089883"), "name" : "LiJia", "skill" : { "skillOne" : "HTML+CSS" } }

Внимательные друзья обнаружат, что это не идеально.Есть дополнительное поле ID, которое нам не нужно.На данный момент нам нужно только установить _id:false. Конечно, ложь и правда здесь,Также может быть представлен 0 и 1.

db.workmate.find(
    {"skill.skillOne":"HTML+CSS"},
    {name:true,"skill.skillOne":true,_id:false}
)

На этом этапе вы просматриваете результаты в терминале, чего мы и хотим.

{ "name" : "JSPang", "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "ShengLei", "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "LiangPeng", "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "HouFei", "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "JiaPeng", "skill" : { "skillOne" : "HTML+CSS" } }
{ "name" : "LiJia", "skill" : { "skillOne" : "HTML+CSS" } }

На самом деле все эти поисковые операции находятся на стадии equals, но не только equals query, нам нужно больше условий запроса.

Модификатор неравенства

  • Меньше чем ($lt): английское полное имя меньше чем
  • Меньше или равно ($lte): полное имя на английском языке меньше, чем равно
  • Больше, чем ($gt): английское полное имя больше, чем
  • Больше или равно ($gte): полное имя на английском языке больше, чем равно
  • Не равно ($ne): английское полное имя не равно

Сейчас мы ищем в компанию людей моложе 30 и старше 25 лет. См. код ниже.

db.workmate.find(
    {age:{$lte:30,$gte:25}},
    {name:true,age:true,"skill.skillOne":true,_id:false}
)

поиск даты

MongoDB также предоставляет удобный метод поиска даты.Теперь мы хотим найти данные, дата регистрации которых больше 10 января 2018. Мы можем написать такой код.

var startDate= new Date('01/01/2018');
db.workmate.find(
    {regeditTime:{$gt:startDate}},
    {name:true,age:true,"skill.skillOne":true,_id:false}
)

Сначала мы создали переменную даты, а затем использовали символ «больше» для фильтрации.

Суммировать:В этом классе не так много контента, но если вы DBA (администратор базы данных), вы будете использовать его каждый день в своей работе, поэтому практика содержания этого класса необходима.Если вам лень это делать, вы может быть не в состоянии выучить следующие курсы.

Раздел 11: Запрос: многокритериальный запрос для поиска

Во многих случаях значение, которое нам нужно запросить, представляет собой не только простое условие, например, мы хотим запросить коллег, которым 33 года и 25 лет, или мы хотим запросить коллег, которым больше 30 лет и у которых есть Навыки PHP. MongoDB также очень хорошо поддерживает это, давайте узнаем об этом.

$in модификатор

Модификатор in может легко решить ситуацию запроса одного ключа и нескольких значений. Как и в примере, который мы упоминали выше, теперь мы хотим запросить информацию о коллегах, которым 25 и 33 года.

db.workmate.find({age:{$in:[25,33]}},
    {name:1,"skill.skillOne":1,age:1,_id:0}
)

Относительным модификатором $in является $nin, что означает, что запрос относится к тому, что означает условие $in.Вы можете попрактиковаться в этом сами, и я не буду приводить здесь слишком много демонстрации.

$или модификатор

Он используется для запроса нескольких ключевых значений, таких как запрос информации о коллегах старше 30 лет или о том, кто может работать с PHP. Основное отличие заключается в двух ключевых значениях. Модификатор $in — это ключевое значение, которое необходимо сравнить и запомнить.

db.workmate.find({$or:[
    {age:{$gte:30}},
    {"skill.skillThree":'PHP'}
]},
    {name:1,"skill.skillThree":1,age:1,_id:0}
)

или легко понять, то есть смысл или, результаты, которые мы нашли, совпадают, мы нашли информацию о людях старше 30 лет, или умеющих делать PHP. Соответственно есть и модификатор $nor, который здесь демонстрироваться не будет, так что попробуйте сами.

$и модификатор

$и используется для поиска ситуации, когда несколько ключевых значений удовлетворяются.Например, если вы хотите запросить информацию о коллегах старше 30 лет, которые могут заниматься PHP, следует отметить, что эти два пункта должны быть удовлетворены . Конечно, писать относительно просто. Просто замените или в приведенном выше коде на и.

db.workmate.find({$and:[
    {age:{$gte:30}},
    {"skill.skillThree":'PHP'}
]},
    {name:1,"skill.skillThree":1,age:1,_id:0}
)

$не модификатор

Он используется для запроса значений, отличных от условий.Например, теперь мы хотим найти информацию о людях старше 20 и моложе 30 лет. Следует отметить, что модификатор $not нельзя использовать в условных операторах, а можно использовать только во внешних запросах.

db.workmate.find({
    age:{
        $not:{
            $lte:30,
            $gte:20
        }
    }
},
{name:1,"skill.skillOne":1,age:1,_id:0}
)

Суммировать:Знания в этом классе относительно простые, но в различении памяти легко запутаться. К счастью, учебные заметки уже подготовлены для вас здесь. Приходи и посмотри, когда забудешь.

Раздел 12: Запросы: Запросы массива для поиска

В этом разделе в основном изучается запрос массивов. При изучении обновления я трачу много времени на работу с массивами. Видно, что работа с массивами очень важна в MongoDB. Из-за немного больших проектов проектируемые данные коллекции сложнее Операции с массивами.

Полные данные

Предыдущая коллекция нашей рабочей задачи очень маленькая до массива. Теперь он добавляется к данным и добавляет некоторые интересы для всех, таких как запись кода, приготовления пищи, просмотр фильмов.

Конечно, вы можете сконструировать эти данные по своему желанию, но если вы не хотите заморачиваться, данные для вас подготовлены и здесь, вам нужно просто удалить (удалить) предыдущую таблицу и перезагрузить (загрузить) ее.

var workmate1={
    name:'JSPang',
    age:33,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
        skillThree:'PHP'
    },
    regeditTime:new Date(),
    interest:['看电影','看书','吃美食','钓鱼','旅游']
}
 
var workmate2={
    name:'ShengLei',
    age:31,
    sex:1,
    job:'JAVA后端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'J2EE',
        skillThree:'PPT'
    },
    regeditTime:new Date(),
    interest:['篮球','看电影','做饭']
}
 
var workmate3={
    name:'MinJie',
    age:18,
    sex:0,
    job:'UI',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'UI',
        skillThree:'PPT'
    },
    regeditTime:new Date(),
    interest:['做饭','画画','看电影']
}
var workmate4={
    name:'XiaoWang',
    age:25,
    sex:1,
    job:'UI',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'UI',
        skillThree:'PPT'
    },
    regeditTime:new Date(),
    interest:['写代码','篮球','画画']
}
var workmate5={
    name:'LiangPeng',
    age:28,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
    },
    regeditTime:new Date(),
    interest:['玩游戏','写代码','做饭']
}
 
var workmate6={
    name:'HouFei',
    age:25,
    sex:0,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
    },
    regeditTime:new Date(),
    interest:['化妆','读书','做饭']
}
 
var workmate7={
    name:'LiuYan',
    age:35,
    sex:0,
    job:'美工',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'CAD',
    },
    regeditTime:new Date(),
    interest:['画画','聚会','看电影']
}
 
 
var workmate8={
    name:'DingLu',
    age:20,
    sex:0,
    job:'美工',
    skill:{
        skillOne:'PhotoShop',
        skillTwo:'CAD',
    },
    regeditTime:new Date(),
    interest:['美食','看电影','做饭']
}
 
var workmate9={
    name:'JiaPeng',
    age:29,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
        skillThree:'PHP'
    },
    regeditTime:new Date(),
    interest:['写代码','篮球','游泳']
}
 
var workmate10={
    name:'LiJia',
    age:26,
    sex:0,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        skillTwo:'JavaScript',
        skillThree:'PHP'
    },
    regeditTime:new Date(),
    interest:['玩游戏','美食','篮球']
}
 
 
 
var db=connect('company');
var workmateArray=[workmate1,workmate2,workmate3,workmate4,workmate5,workmate6,workmate7,workmate8,workmate9,workmate10];
db.workmate.insert(workmateArray);
print('[SUCCESS]:The data was inserted successfully');

Базовый запрос массива

Например, теперь, когда мы знаем, что хобби человека — это «рисование», «вечеринка», «просмотр фильмов», но мы не знаем, кто это, то мы можем использовать простейший запрос к массиву (в реальной работе такая ситуация в основном , он обычно не используется, поэтому этот тип запроса можно использовать только в качестве резерва очков знаний).

db.workmate.find({interest:['画画','聚会','看电影']},
    {name:1,interest:1,age:1,_id:0} 
)

После запуска в терминале мы получили данные. На этот раз мы сказали, что хотим узнать информацию о сотрудниках, которые заинтересованы в просмотре фильмов. Следуя обычной логике, следует использовать приведенный ниже код.

db.workmate.find({interest:['看电影']},
    {name:1,interest:1,age:1,_id:0} 
)

После запуска соответствующие данные о персонале не получены, как мы ожидали, и данные пусты. В чем проблема? Проблема в том, что мы написали квадратную скобку ([]), потому что добавление квадратных скобок эквивалентно полному совпадению, поэтому мы не получили часть данных, удовлетворяющую условиям запроса. Давайте удалим квадратные скобки и посмотрим на результаты.

db.workmate.find({interest:'看电影'},
    {name:1,interest:1,age:1,_id:0} 
)

Вот как мы запрашиваем элемент в массиве, и это самое простое использование запроса массива.

$all - запрос с несколькими элементами массива

Теперь, когда наши условия были обновлены, нам нужно запросить лайкисмотреть фильма такжечтениеИнформация о персонале, то есть для запроса объектов в массиве, в настоящее время используется новый модификатор запроса $all. См. пример ниже:

db.workmate.find(
    {interest:{$all:["看电影","看书"]}},
    {name:1,interest:1,age:1,_id:0} 
)

В это время я нашел людей, которым было интересно и смотреть фильмы, и читать книги.

$in - ИЛИ запрос массива

С модификатором $all должны быть выполнены все условия, и $in можно найти, если он в основном удовлетворяет одному элементу в массиве (иногда его путают с $or). Например, теперь вы хотите запросить информацию о сотрудниках, у которых просмотр фильмов или чтение книг является их хобби.

db.workmate.find(
    {interest:{$in:["看电影","看书"]}},
    {name:1,interest:1,age:1,_id:0} 
)

Числовой запрос массива $size

Модификатор $size может запрашивать результаты на основе количества массивов. Например, теперь количество людей, которых мы хотим найти по интересам, составляет информацию о 5 людях, тогда мы можем использовать $size.

db.workmate.find(
    {interest:{$size:5}},
    {name:1,interest:1,age:1,_id:0} 
)

В это время будут отображаться люди с 5 увлечениями.

$slice - показать параметры

Иногда мне нужно отображать не все значения в массиве, а только первые два элемента.Например, мы сейчас хотим отобразить первые два элемента всех интересов, вместо отображения всех интересов всех.

db.workmate.find(
    {},
    {name:1,interest:{$slice:2},age:1,_id:0} 
)

В это время отображаются первые два элемента интереса каждого человека.Если мы хотим отобразить последний интересующий элемент, мы можем напрямую использовать slice:-1 для запроса.

db.workmate.find(
    {},
    {name:1,interest:{$slice:-1},age:1,_id:0} 
)

Суммировать:Если вы только посмотрите видео, вы не сможете его выучить.Программу нужно практиковать.Я неоднократно подчеркивал во всех видео.Цель состоит в том, чтобы вы действительно выучили ее и применяли в своей работе.

 

Раздел 13: Запрос: Как использовать параметры find

Я уже говорил о 3 запросах, все они оперируют первым параметром (запросом) и вторым параметром (полями) метода find. find также имеет несколько часто используемых параметров, которые в основном используются при разбиении по страницам и сортировке. В этом разделе мы поговорим об этих часто используемых опциях.После понимания мы продемонстрируем эффект пейджинга.

найти параметры:

  • запрос: это условие запроса, первый параметр MongoDB по умолчанию.
  • fields: (возвращаемое содержимое) Стиль результата, отображаемого после запроса, вы можете использовать true и false, чтобы управлять его отображением.
  • limit: возвращаемое число, за которым следует число, определяющее количество результатов, возвращаемых каждым запросом.
  • пропустить: сколько дисплеев пропустить, в сочетании с лимитом можно достичь пейджинга.
  • sort: метод сортировки, используйте 1 для сортировки от меньшего к большему и -1 для сортировки от большого к меньшему.

Демонстрация пейджинга:

Разобравшись с приведенными выше вариантами, теперь мы можем сделать простейшую разбивку на страницы: мы разбиваем коллекции коллег, выводим по два на каждой странице и располагаем их в порядке возраста от младшего к старшему.

db.workmate.find({},{name:true,age:true,_id:false}).limit(0).skip(2).sort({age:1});

$где модификатор

Это очень мощный модификатор, но быть мощным также означает риск. Это позволяет нам использовать методы javascript в условиях для выполнения сложных запросов. Давайте сначала рассмотрим простейший пример, а теперь мы хотим опросить людей старше 30 лет.

db.workmate.find(
    {$where:"this.age>30"},
    {name:true,age:true,_id:false}
)

Здесь это указывает на самого напарника (коллекцию запросов). Таким образом, мы можем вызвать его по желанию в программе. Несмотря на свою мощь и гибкость, этот тип запроса увеличивает нагрузку и безопасность базы данных, поэтому постарайтесь сократить использование модификатора $where в своей работе.

Раздел 14: Запрос: как find используется в тексте js (конец)

При предыдущем использовании find JS пишется в тексте, а затем копируется в терминал для выполнения, что очень хлопотно. В процессе выступления многие друзья спрашивали меня, как запустить это прямо в тексте, например, написать заявление об обновлении. В этом уроке мы научимся выполнять прямо в тексте.

hasNext результат цикла

Чтобы выполнить наш оператор поиска в тексте, нам нужно использовать курсоры и циклы.Давайте посмотрим на код.Я прокомментировал каждое предложение в коде.

var db = connect("company")  //进行链接对应的集合collections
var result = db.workmate.find() //声明变量result,并把查询结果赋值给result
//利用游标的hasNext()进行循环输出结果。
while(result.hasNext()){
    printjson(result.next())  //用json格式打印结果
}

После написания теперь вам нужно только загрузить () в терминале для выполнения, больше не нужно копировать и вставлять.

цикл forEach

Использование результата цикла hasNext требует помощи while. MongoDB также предоставляет нам цикл forEach. Теперь измените приведенный выше код и используйте цикл forEach для вывода результата.

var db = connect("company")  //进行链接对应的集合collections
var result = db.workmate.find() //声明变量result,并把查询结果赋值给result
//利用游标的hasNext()进行循环输出结果。
result.forEach(function(result){
    printjson(result)
})

Лично цикл forEach более элегантный. Эти два способа очень хороши, выбирайте по собственным предпочтениям.

Резюме: Итак, мы завершили все основные части MongoDB. Мы научились добавлять, удалять, изменять и проверять ее. Вы также можете использовать MongoDB для выполнения некоторых операций. Следует отметить, что это только конец этой статьи.В следующей статье мы объясним MongoDB и начнем объяснять индексы MongoDB.