И их решения
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 ()’ возвращает каждую строку в указанной коллекции. Вот пример:
- У вас есть база данных под названием "test"
- Внутри «test» у вас есть коллекция под названием «items»
Если вам нужны все данные внутри элементов, введите это в терминал:
(нажимайте ввод после каждой строки)
mongo use test db.items.find()
и они не работают:
test.items.find() items.find()
Другие полезные советы
При тестировании: используйте db.dropDatabase (), чтобы удалить всю базу данных после тестирования соединений, схем или после завершения тестирования.
Создание базы данных: после того, как вы определили новую схему и модель, новая база данных создается автоматически после того, как вы вставляете в схему первый документ. Не тратьте время на поиски того, как создать новую базу данных.
Другие полезные ресурсы: официальные Mongoose Docs и MongoDB docs очень удобны для решения большинства проблем, которые могут у вас возникнуть.