Mongoose — это инфраструктура JavaScript, которая обычно используется в приложении Node.js с базой данных MongoDB. В этой статье я собираюсь познакомить вас с Mongoose и MongoDB, и, что более важно, там, где эти технологии подходят для вашего приложения.
Что такое MongoDB?
Начнем с MongoDB. MongoDB — это база данных, в которой ваши данные хранятся в виде документов. Чаще всего эти документы напоминают JSON-подобную структуру:
1
2
3
4
|
{
firstName: «Jamie»,
lastName: «Munro»
}
|
Документ затем помещается в коллекцию. В качестве примера, приведенный выше пример документа определяет user
объект. Этот user
объект тогда, как правило, будет частью коллекции, называемой users
.
Одним из ключевых факторов с MongoDB является его гибкость, когда речь идет о структуре. Несмотря на то, что в первом примере user
объект содержал свойства firstName
и lastName
, эти свойства не требуются в каждом user
документе, который является частью коллекции users
. Это то, что отличает MongoDB от базы данных SQL, такой как MySQL или Microsoft SQL Server, которая требует строго определенной схемы базы данных каждого объекта, который она хранит.
Возможность создавать динамические объекты, которые хранятся в виде документов в базе данных, — вот где Mongoose вступает в игру.
Что такое мангуст?
Mongoose является картографом объектных документов (ODM). Это означает, что Mongoose позволяет вам определять объекты со строго типизированной схемой, которая сопоставлена с документом MongoDB.
Mongoose предоставляет невероятное количество функций для создания и работы со схемами. В настоящее время Mongoose содержит восемь типов SchemaType, которые сохраняются для свойства, когда оно сохраняется в MongoDB. Они есть:
- строка
- номер
- Дата
- буфер
- логический
- смешанный
- ObjectId
- массив
Каждый тип данных позволяет вам указать:
- значение по умолчанию
- пользовательская функция проверки
- указать поле, обязательное для заполнения
- функция get, которая позволяет вам манипулировать данными, прежде чем они будут возвращены как объект
- функция set, которая позволяет вам манипулировать данными перед их сохранением в базе данных
- создавать индексы, позволяющие быстрее извлекать данные
В дополнение к этим общим параметрам, определенные типы данных позволяют вам дополнительно настраивать, как данные хранятся и извлекаются из базы данных. Например, тип данных String
также позволяет указывать следующие дополнительные параметры:
- преобразовать его в нижний регистр
- преобразовать его в верхний регистр
- обрезать данные перед сохранением
- регулярное выражение, которое может ограничивать данные, которые могут быть сохранены в процессе проверки
- перечисление, которое может определить список допустимых строк
Свойства Number
и Date
поддерживают указание минимального и максимального значения, допустимого для этого поля.
Большинство из восьми разрешенных типов данных должны быть вам знакомы. Однако есть несколько исключений, которые могут ObjectId
вас, например, Buffer
, Mixed
, ObjectId
и Array
.
Тип данных Buffer
позволяет сохранять двоичные данные. Типичным примером двоичных данных может быть изображение или закодированный файл, такой как документ PDF.
Тип данных Mixed
превращает свойство в поле «все идет». Это поле напоминает, сколько разработчиков может использовать MongoDB, потому что нет определенной структуры. Будьте осторожны с использованием этого типа данных, поскольку он теряет многие замечательные функции, которые предоставляет Mongoose, такие как проверка данных и обнаружение изменений сущностей, чтобы автоматически узнавать об обновлении свойства при сохранении.
ObjectId
данных ObjectId
обычно указывает ссылку на другой документ в вашей базе данных. Например, если у вас есть коллекция книг и авторов, документ книги может содержать свойство ObjectId
которое ссылается на конкретного автора документа.
Тип данных Array
позволяет хранить JavaScript-подобные массивы. С типом данных Array вы можете выполнять над ними обычные операции с массивами JavaScript, такие как push, pop, shift, slice и т. Д.
Быстрый обзор
Прежде чем перейти к созданию кода, я просто хотел вспомнить то, что мы только что узнали. MongoDB — это база данных, которая позволяет хранить документы с динамической структурой. Эти документы сохраняются в коллекции.
Mongoose — это библиотека JavaScript, которая позволяет вам определять схемы со строго типизированными данными. После того, как схема определена, Mongoose позволяет вам создать Модель на основе определенной схемы. Модель Mongoose затем сопоставляется с документом MongoDB через определение схемы модели.
После того, как вы определили свои схемы и модели, Mongoose содержит множество различных функций, которые позволяют вам проверять, сохранять, удалять и запрашивать ваши данные, используя обычные функции MongoDB. Я поговорю об этом подробнее с конкретными примерами кода для подражания.
Установка MongoDB
Прежде чем мы сможем приступить к созданию наших схем и моделей Mongoose, необходимо установить и настроить MongoDB. Я бы предложил посетить страницу загрузки MongoDB . Есть несколько вариантов, доступных для установки. Я связался с Сервером Сообщества. Это позволяет вам установить версию, специфичную для вашей операционной системы. MongoDB также предлагает Enterprise Server и установку поддержки облака. Поскольку целые книги могут быть написаны об установке, настройке и мониторинге MongoDB, я собираюсь придерживаться Сервера совместной работы.
После того, как вы скачали и установили MongoDB для выбранной вами операционной системы, вам нужно будет запустить базу данных. Вместо того, чтобы изобретать велосипед, я бы предложил посетить документацию MongoDB по установке MongoDB Community Edition .
Я подожду здесь, пока вы настроите MongoDB. Когда вы будете готовы, мы можем перейти к настройке Mongoose для подключения к вашей только что установленной базе данных MongoDB.
Настройка мангуста
Mongoose — это фреймворк JavaScript, и я собираюсь использовать его в приложении Node.js. Если у вас уже установлен Node.js, вы можете перейти к следующему шагу. Если у вас не установлен Node.js, я предлагаю вам начать со страницы загрузки Node.js. и выбрать установщик для вашей операционной системы.
С настроенным и готовым к работе Node.js я собираюсь создать новое приложение, а затем установить пакет Mongoose NPM.
В командной строке, в которой вы хотите установить приложение, вы можете запустить следующие команды:
1
2
3
|
mkdir mongoose_basics
cd mongoose_basics
npm init
|
Для инициализации моего приложения я оставил все как значения по умолчанию. Теперь я собираюсь установить пакет mongoose следующим образом:
1
|
npm install mongoose —save
|
Со всеми настроенными предварительными условиями, давайте подключимся к базе данных MongoDB. Я поместил следующий код в файл index.js, потому что я выбрал его в качестве отправной точки для своего приложения:
1
2
3
|
var mongoose = require(‘mongoose’);
mongoose.connect(‘mongodb://localhost/mongoose_basics’);
|
Первая строка кода включает библиотеку mongoose
. Затем я открываю соединение с базой данных, которую я назвал mongoose_basics
используя функцию connect
.
Функция connect
принимает два других необязательных параметра. Второй параметр — это объект опций, где вы можете определить такие вещи, как имя пользователя и пароль, если это необходимо. Третий параметр, который также может быть вторым параметром, если у вас нет параметров, — это функция обратного вызова после попытки подключения. Функцию обратного вызова можно использовать одним из двух способов:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
mongoose.connect(uri, options, function(error) {
// Check error in initial connection.
});
// Or using promises
mongoose.connect(uri, options).then(
() => { /** ready to use.
err => { /** handle initial connection error */ }
);
|
Чтобы избежать потенциального введения в обещания JavaScript , я буду использовать первый способ. Ниже обновленный файл index.js:
1
2
3
4
5
6
7
8
9
|
var mongoose = require(‘mongoose’);
mongoose.connect(‘mongodb://localhost/mongoose_basics’, function (err) {
if (err) throw err;
console.log(‘Successfully connected’);
});
|
Если при подключении к базе данных возникает ошибка, генерируется исключение и вся дальнейшая обработка останавливается. Когда ошибки не возникает, я записал сообщение об успешном завершении в консоль.
Mongoose теперь настроен и подключен к базе данных с именем mongoose_basics
. Мое подключение MongoDB не использует имя пользователя, пароль или пользовательский порт. Если вам нужно установить эти параметры или любой другой параметр во время подключения, я предлагаю ознакомиться с документацией Mongoose по подключению . Документация содержит подробные объяснения множества доступных опций, а также того, как создать несколько соединений, пул соединений, реплики и т. Д.
После успешного подключения давайте перейдем к определению схемы Mongoose.
Определение схемы Мангуста
Во время введения я показал user
объект, который содержал два свойства: firstName
и lastName
. В следующем примере я перевел этот документ в схему Mongoose:
1
2
3
4
|
var userSchema = mongoose.Schema({
firstName: String,
lastName: String
});
|
Это очень простая схема, которая просто содержит два свойства без атрибутов, связанных с ней. Давайте расширим этот пример, преобразовав свойства имени и фамилии в дочерние объекты свойства name
. Свойство name
будет содержать как имя, так и фамилию. Я также добавлю created
свойство типа Date
.
1
2
3
4
5
6
7
|
var userSchema = mongoose.Schema({
name: {
firstName: String,
lastName: String
},
created: Date
});
|
Как видите, Mongoose позволяет мне создавать очень гибкие схемы с множеством различных комбинаций того, как я могу организовать свои данные.
В следующем примере я собираюсь создать две новые схемы, которые продемонстрируют, как создать связь с другой схемой: author
и book
. Схема book
будет содержать ссылку на схему author
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
var authorSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: {
firstName: String,
lastName: String
},
biography: String,
twitter: String,
facebook: String,
linkedin: String,
profilePicture: Buffer,
created: {
type: Date,
default: Date.now
}
});
|
Выше приведена схема author
которая расширяет концепции user
схемы, которую я создал в предыдущем примере. Чтобы связать автора и книгу вместе, первое свойство схемы author
— это свойство ObjectId
которое является ObjectId
схемы ObjectId
. _id
— это общий синтаксис для создания первичного ключа в Mongoose и MongoDB. Затем, как и user
схема, я определил свойство name
содержащее name
и name
автора.
Расширяя user
схему, author
содержит несколько других типов схем String
. Я также добавил тип схемы Buffer
который может содержать фотографию профиля автора. Окончательное свойство содержит дату создания автора; однако вы можете заметить, что он создан немного по-другому, потому что он определил значение по умолчанию «сейчас» Когда автор сохраняется в базе данных, это свойство будет установлено на текущую дату / время.
Чтобы завершить примеры схемы, давайте создадим схему book
которая содержит ссылку на автора, используя ObjectId
схемы ObjectId
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
var bookSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
title: String,
summary: String,
isbn: String,
thumbnail: Buffer,
author: {
type: mongoose.Schema.Types.ObjectId,
ref: ‘Author’
},
ratings: [
{
summary: String,
detail: String,
numberOfStars: Number,
created: {
type: Date,
default: Date.now
}
}
],
created: {
type: Date,
default: Date.now
}
});
|
Схема book
содержит несколько свойств типа String
. Как уже упоминалось выше, он содержит ссылку на схему author
. Чтобы дополнительно продемонстрировать мощные определения схемы, схема book
также содержит Array
ratings
. Каждый рейтинг состоит из summary
, detail
, numberOfStars
и свойства created
даты.
Mongoose позволяет гибко создавать схемы со ссылками на другие схемы или, как в приведенном выше примере со свойством ratings
, он позволяет создавать Array
дочерних свойств, которые могут содержаться в связанной схеме (например, книга для автора) или встроенный, как в приведенном выше примере (с книгой в Array
рейтингов).
Создание и сохранение моделей Mongoose
Поскольку схемы author
и book
демонстрируют гибкость схем Mongoose, я собираюсь продолжить использовать эти схемы и вывести из них модель Author
и Book
.
1
2
3
|
var Author = mongoose.model(‘Author’, authorSchema);
var Book = mongoose.model(‘Book’, bookSchema);
|
Модель Mongoose при сохранении создает документ в MongoDB со свойствами, определенными схемой, из которой она получена.
Чтобы продемонстрировать создание и сохранение объекта, в следующем примере я собираюсь создать несколько объектов: модель Author
и несколько моделей Book
. После создания эти объекты будут сохранены в MongoDB с использованием метода сохранения модели.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
var jamieAuthor = new Author {
_id: new mongoose.Types.ObjectId(),
name: {
firstName: ‘Jamie’,
lastName: ‘Munro’
},
biography: ‘Jamie is the author of ASP.NET MVC 5 with Bootstrap and Knockout.js.’,
twitter: ‘https://twitter.com/endyourif’,
facebook: ‘https://www.facebook.com/End-Your-If-194251957252562/’
};
jamieAuthor.save(function(err) {
if (err) throw err;
console.log(‘Author successfully saved.’);
var mvcBook = new Book {
_id: new mongoose.Types.ObjectId(),
title: ‘ASP.NET MVC 5 with Bootstrap and Knockout.js’,
author: jamieAuthor._id,
ratings:[{
summary: ‘Great read’
}]
};
mvcBook.save(function(err) {
if (err) throw err;
console.log(‘Book successfully saved.’);
});
var knockoutBook = new Book {
_id: new mongoose.Types.ObjectId(),
title: ‘Knockout.js: Building Dynamic Client-Side Web Applications’,
author: jamieAuthor._id
};
knockoutBook.save(function(err) {
if (err) throw err;
console.log(‘Book successfully saved.’);
});
});
|
В приведенном выше примере я беззастенчиво вставил ссылку на две мои последние книги. Пример начинается с создания и сохранения jamieObject
, созданного на основе модели Author
. Внутри функции сохранения jamieObject
, если происходит ошибка, приложение выведет исключение. После успешного сохранения внутри функции save
создаются и сохраняются два объекта книги. Аналогично jamieObject
, если при сохранении возникает ошибка, jamieObject
ошибка; в противном случае сообщение об успехе выводится на консоль.
Чтобы создать ссылку на автора, оба объекта книги ссылаются на первичный ключ _id
схемы author
свойстве author
схемы book
.
Проверка данных перед сохранением
Это довольно часто для данных, которые в конечном итоге создают модель для заполнения формой на веб-странице. По этой причине рекомендуется проверить эти данные перед сохранением модели в MongoDB.
В этом следующем примере я обновил предыдущую схему автора, чтобы добавить проверку для следующих свойств: firstName
, twitter
, facebook
и linkedin
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
var authorSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: {
firstName: {
type: String,
required: true
},
lastName: String
},
biography: String,
twitter: {
type: String,
validate: {
validator: function(text) {
return text.indexOf(‘https://twitter.com/’) === 0;
},
message: ‘Twitter handle must start with https://twitter.com/’
}
},
facebook: {
type: String,
validate: {
validator: function(text) {
return text.indexOf(‘https://www.facebook.com/’) === 0;
},
message: ‘Facebook must start with https://www.facebook.com/’
}
},
linkedin: {
type: String,
validate: {
validator: function(text) {
return text.indexOf(‘https://www.linkedin.com/’) === 0;
},
message: ‘LinkedIn must start with https://www.linkedin.com/’
}
},
profilePicture: Buffer,
created: {
type: Date,
default: Date.now
}
});
|
firstName
присвоено required
свойство. Теперь, когда я вызываю функцию save
, Mongoose выдаст сообщение об ошибке, указывающее, что свойство firstName
является обязательным. Я решил не делать свойство lastName
обязательным, если Шер или Мадонна будут авторами в моей базе данных.
В свойствах twitter
, facebook
и linkedin
есть очень похожие пользовательские валидаторы. Каждый из них гарантирует, что значения начинаются с соответствующего доменного имени в социальных сетях. Эти поля не являются обязательными, поэтому валидатор будет применяться только при предоставлении данных для этого свойства.
Поиск и обновление данных
Введение в Mongoose не будет полным без примера поиска записи и обновления одного или нескольких свойств этого объекта.
Mongoose предоставляет несколько различных функций для поиска данных для конкретной модели. Это функции find
, findOne
и findById
.
findOne
функции find
и findOne
принимают объект в качестве входных данных, позволяющих выполнять сложный поиск, тогда как findById
принимает только одно значение с функцией обратного вызова (пример будет приведен ниже) В следующем примере я собираюсь продемонстрировать, как найти все книги, которые содержат строку «mvc» в заголовке.
1
2
3
4
5
6
7
|
Book.find({
title: /mvc/i
}).exec(function(err, books) {
if (err) throw err;
console.log(books);
});
|
Внутри функции поиска я ищу строку без учета регистра mvc в свойстве title
. Это достигается с помощью того же синтаксиса для поиска строки с помощью JavaScript .
Вызов функции find также может быть связан с другими методами запроса, такими как where
and
, or
, limit
, sort
, any
и т. Д.
Давайте расширим предыдущий пример, чтобы ограничить наши результаты первыми пятью книгами и отсортировать по дате создания по убыванию. Это вернет к пяти самым последним книгам, содержащим в заголовке «mvc».
1
2
3
4
5
6
7
8
9
|
Book.find({
title: /mvc/i
}).sort(‘-created’)
.limit(5)
.exec(function(err, books) {
if (err) throw err;
console.log(books);
});
|
После применения функции find
порядок других функций не важен, поскольку все связанные функции скомпилированы вместе в один запрос и не выполняются до тех пор, пока не будет вызвана функция exec
.
Как я упоминал ранее, findById
выполняется немного по-другому. Он выполняется немедленно и принимает функцию обратного вызова, вместо того, чтобы допускать цепочку функций. В следующем примере я опрашиваю конкретного автора по его _id
.
1
2
3
4
5
|
Author.findById(’59b31406beefa1082819e72f’, function(err, author) {
if (err) throw err;
console.log(author);
});
|
_id
в вашем случае может немного отличаться. Я скопировал этот _id
из предыдущего console.log
когда нашел список книг с заголовком «mvc».
Как только объект был возвращен, вы можете изменить любое из его свойств, чтобы обновить его. После того, как вы внесли необходимые изменения, вы вызываете метод save
, как и при создании объекта. В этом следующем примере я findbyId
пример findbyId
и findbyId
свойство linkedin
у автора.
01
02
03
04
05
06
07
08
09
10
11
|
Author.findById(’59b31406beefa1082819e72f’, function(err, author) {
if (err) throw err;
author.linkedin = ‘https://www.linkedin.com/in/jamie-munro-8064ba1a/’;
author.save(function(err) {
if (err) throw err;
console.log(‘Author updated successfully’);
});
});
|
После успешного поиска автора устанавливается свойство linkedin
вызывается функция save
. Mongoose может обнаружить, что свойство linkedin
было изменено, и отправит инструкцию обновления в MongoDB только для тех свойств, которые были изменены. Если при сохранении произошла ошибка, будет сгенерировано исключение, которое остановит приложение. В случае успеха сообщение об успешном занесении в консоль.
Mongoose также предлагает две дополнительные функции, которые делают поиск объекта и сохраняют его за один шаг с соответствующими функциями: findByIdAndUpdate
и findOneAndUpdate
. Давайте обновим предыдущий пример, чтобы использовать findByIdAndUpdate
.
1
2
3
4
5
6
7
|
Author.findByIdAndUpdate(’59b31406beefa1082819e72f’,
{ linkedin: ‘https://www.linkedin.com/in/jamie-munro-8064ba1a/’ },
function(err, author) {
if (err) throw err;
console.log(author);
});
|
В предыдущем примере обновляемые свойства предоставляются как объект для второго параметра функции findByIdAndUpdate
. Функция обратного вызова теперь является третьим параметром. Когда обновление выполнено успешно, возвращенный объект author
содержит обновленную информацию. Это регистрируется в консоли, чтобы увидеть обновленные свойства автора.
Окончательный пример кода
В этой статье я предоставил небольшие фрагменты кода, идентифицирующие очень специфическое действие, такое как создание схемы, создание модели и т. Д. Давайте соберем все это в полном примере.
Во-первых, я создал два дополнительных файла: author.js
и book.js
Эти файлы содержат соответствующие определения схемы и создания модели. Последняя строка кода делает модель доступной для использования в файле index.js
.
Начнем с файла author.js:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
var mongoose = require(‘mongoose’);
var authorSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: {
firstName: {
type: String,
required: true
},
lastName: String
},
biography: String,
twitter: {
type: String,
validate: {
validator: function(text) {
return text.indexOf(‘https://twitter.com/’) === 0;
},
message: ‘Twitter handle must start with https://twitter.com/’
}
},
facebook: {
type: String,
validate: {
validator: function(text) {
return text.indexOf(‘https://www.facebook.com/’) === 0;
},
message: ‘Facebook must start with https://www.facebook.com/’
}
},
linkedin: {
type: String,
validate: {
validator: function(text) {
return text.indexOf(‘https://www.linkedin.com/’) === 0;
},
message: ‘LinkedIn must start with https://www.linkedin.com/’
}
},
profilePicture: Buffer,
created: {
type: Date,
default: Date.now
}
});
var Author = mongoose.model(‘Author’, authorSchema);
module.exports = Author;
|
Далее идет файл book.js
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
var mongoose = require(‘mongoose’);
var bookSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
title: String,
summary: String,
isbn: String,
thumbnail: Buffer,
author: {
type: mongoose.Schema.Types.ObjectId,
ref: ‘Author’
},
ratings: [
{
summary: String,
detail: String,
numberOfStars: Number,
created: {
type: Date,
default: Date.now
}
}
],
created: {
type: Date,
default: Date.now
}
});
var Book = mongoose.model(‘Book’, bookSchema);
module.exports = Book;
|
И, наконец, обновленный файл index.js
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
var mongoose = require(‘mongoose’);
var Author = require(‘./author’);
var Book = require(‘./book’);
mongoose.connect(‘mongodb://localhost/mongoose_basics’, function (err) {
if (err) throw err;
console.log(‘Successfully connected’);
var jamieAuthor = new Author({
_id: new mongoose.Types.ObjectId(),
name: {
firstName: ‘Jamie’,
lastName: ‘Munro’
},
biography: ‘Jamie is the author of ASP.NET MVC 5 with Bootstrap and Knockout.js.’,
twitter: ‘https://twitter.com/endyourif’,
facebook: ‘https://www.facebook.com/End-Your-If-194251957252562/’
});
jamieAuthor.save(function(err) {
if (err) throw err;
console.log(‘Author successfully saved.’);
var mvcBook = new Book({
_id: new mongoose.Types.ObjectId(),
title: ‘ASP.NET MVC 5 with Bootstrap and Knockout.js’,
author: jamieAuthor._id,
ratings:[{
summary: ‘Great read’
}]
});
mvcBook.save(function(err) {
if (err) throw err;
console.log(‘Book successfully saved.’);
});
var knockoutBook = new Book({
_id: new mongoose.Types.ObjectId(),
title: ‘Knockout.js: Building Dynamic Client-Side Web Applications’,
author: jamieAuthor._id
});
knockoutBook.save(function(err) {
if (err) throw err;
console.log(‘Book successfully saved.’);
});
});
});
|
В приведенном выше примере все действия Mongoose содержатся в функции connect
. Файлы author
и book
включаются в функцию require
после включения библиотеки mongoose
.
Запустив MongoDB, вы можете запустить полное приложение Node.js с помощью следующей команды:
1
|
node index.js
|
После сохранения некоторых данных в моей базе данных я обновил файл index.js
с помощью функций поиска следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
var mongoose = require(‘mongoose’);
var Author = require(‘./author’);
var Book = require(‘./book’);
mongoose.connect(‘mongodb://localhost/mongoose_basics’, function (err) {
if (err) throw err;
console.log(‘Successfully connected’);
Book.find({
title: /mvc/i
}).sort(‘-created’)
.limit(5)
.exec(function(err, books) {
if (err) throw err;
console.log(books);
});
Author.findById(’59b31406beefa1082819e72f’, function(err, author) {
if (err) throw err;
author.linkedin = ‘https://www.linkedin.com/in/jamie-munro-8064ba1a/’;
author.save(function(err) {
if (err) throw err;
console.log(‘Author updated successfully’);
});
});
Author.findByIdAndUpdate(’59b31406beefa1082819e72f’, { linkedin: ‘https://www.linkedin.com/in/jamie-munro-8064ba1a/’ }, function(err, author) {
if (err) throw err;
console.log(author);
});
});
|
Еще раз, вы можете запустить приложение с помощью команды: node index.js
.
Резюме
Прочитав эту статью, вы сможете создавать чрезвычайно гибкие схемы и модели Mongoose, применять простую или сложную проверку, создавать и обновлять документы и, наконец, искать документы, которые были созданы.
Надеюсь, теперь вы чувствуете себя комфортно, используя Mongoose. Если вы хотите узнать больше, я бы посоветовал ознакомиться с руководствами Mongoose, в которых рассматриваются более сложные темы, такие как популяция, промежуточное ПО, обещания и т. Д.
Удачной охоты (ссылка на бедного мангустского животного)!