И их решения

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

Если вы новичок в Mongo и Mongoose, я настоятельно рекомендую краткое руководство по работе с Mongoose:



Все в этой статье будет основано на примерах, приведенных в кратком руководстве.

Ловушка №1: переосмысление руководства

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

Итак, это:

var silence = new Kitten({ name: 'Silence' });

создает новый документ, а не новую коллекцию.

Ловушка №2: не забывайте экономить

Сделать это несложно:

var fluffy = new Kitten({ name: 'fluffy' });

Но забудьте об этом:

fluffy.save(function (err, fluffy) {   
  if (err) return console.error(err);   
  fluffy.speak(); 
});

Если у вас возникнут проблемы с поиском своей версии пушистика в коллекции, сначала проверьте, сохранили ли вы ее.

Ловушка # 3: ошибка подключения MongoDB при запуске нового проекта

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

Сообщение об ошибке может выглядеть примерно так:

npm ERR! code ELIFECYCLE
npm ERR! errno 48
npm ERR! <file location> db-start: `mongod --dbpath ./database/data/db`
npm ERR! Exit status 48
npm ERR!
npm ERR! Failed at the <file location> db-start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Перейдите в папку проекта в терминале и введите следующее:
(нажимайте ввод после каждой строки)

mongo
use admin
db.shutdownServer()

Ловушка 4: db.collection.find ()

‘.Find ()’ возвращает каждую строку в указанной коллекции. Вот пример:

  1. У вас есть база данных под названием "test"
  2. Внутри «test» у вас есть коллекция под названием «items»

Если вам нужны все данные внутри элементов, введите это в терминал:
(нажимайте ввод после каждой строки)

mongo
use test
db.items.find()

и они не работают:

test.items.find()
items.find()

Другие полезные советы

При тестировании: используйте db.dropDatabase (), чтобы удалить всю базу данных после тестирования соединений, схем или после завершения тестирования.

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

Другие полезные ресурсы: официальные Mongoose Docs и MongoDB docs очень удобны для решения большинства проблем, которые могут у вас возникнуть.