Ответ 1
На главной странице Mongoose:
Mongoose предоставляет прямолинейное, основанное на схеме решение для моделирования данных вашего приложения и включает встроенное литье типов, валидацию, построение запросов, крючки бизнес-логики и многое другое из коробки.
Mongoose не может вывести из коллекции потенциально уникальных документов схему. MongoDB не применяет схему к документам, хранящимся в коллекции.
Итак, Mongoose добавляет слой на собственный драйвер NodeJS (здесь), который многие находят более продуктивным. Это не требование использовать, хотя с MongoDB при использовании Node.JS.
Mongoose нуждается в двух вещах в основном для работы:
- Схема == это определяет структуру документа (ссылку). Вы можете добавить валидацию, новые методы, добавить виртуальные свойства, использовать типы данных, установить ссылки на другие коллекции (модели).
- Модель == это класс, который затем используется во время выполнения для выражения запросов к коллекциям (ссылка). Для построения модели используется определение схемы.
Итак, как вы видели в образце, который вы вставили, есть определенная Schema
котенка, а затем создается Model
Kitten
. Что приятно с использованием схемы и модели, так это то, что Mongoose затем применяет доступные свойства/поля.
Вы только определяете Schema
и Model
один раз в приложении. Поэтому, как правило, по мере запуска приложения вам необходимо выполнить код для их определения, а затем использовать экземпляры Model
мере необходимости на протяжении всего жизненного цикла приложения.
Есть еще много причин, по которым вы захотите использовать Mongoose потенциально.
Вы абсолютно правы, но вы можете просто использовать что-то более прямое, без схемы, используя собственный драйвер NodeJS. Синтаксис будет похож на то, что вы показали, но немного сложнее:
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if(err) { return console.dir(err); }
var collection = db.collection('kittens');
collection.find().toArray(function(err, kittens) {
// here ...
});
});
Вместо простого:
Kitten.find(function(err, kittens) {
});
Кроме того, при использовании Mongoose вы можете обнаружить, что писать более сложные запросы легче написать и прочитать:
Kitten.find().where('name', 'Harold').exec(/*callback*/);
Я бы предложил прочитать дополнительную документацию, чтобы лучше понять структуру и хорошо ли она соответствовала вашим потребностям. К сожалению, документация немного разбросана, но если вы перейдете к заголовкам заголовка Guide
, у вас будет много хорошей информации.