Как правильно заполнить MongoDB через Mongoose

Правильно заполнить MongoDB через Mongoose — значит не просто отправить в базу случайный объект, а сначала описать схему, создать модель, подготовить данные нужной формы и проверить, что документы реально сохранились. Mongoose полезен именно тем, что помогает держать структуру данных под контролем: типы, обязательные поля, значения по умолчанию и валидацию

Базовая схема такая: подключаемся к MongoDB, описываем Schema, создаем Model, вставляем данные через create() или insertMany()

Пример схемы

import mongoose from "mongoose";

const productSchema = new mongoose.Schema(
  {
    title: {
      type: String,
      required: true,
      trim: true
    },
    price: {
      type: Number,
      required: true,
      min: 0
    },
    inStock: {
      type: Boolean,
      default: true
    },
    tags: [String]
  },
  {
    timestamps: true
  }
);

const Product = mongoose.model("Product", productSchema);

Здесь title обязателен, price должен быть числом не меньше нуля, inStock по умолчанию true, а timestamps добавляет createdAt и updatedAt

Seed-скрипт для заполнения базы

Создайте файл seed-products.js

import mongoose from "mongoose";

const productSchema = new mongoose.Schema(
  {
    title: { type: String, required: true, trim: true },
    price: { type: Number, required: true, min: 0 },
    inStock: { type: Boolean, default: true },
    tags: [String]
  },
  { timestamps: true }
);

const Product = mongoose.model("Product", productSchema);

await mongoose.connect("mongodb://localhost:27017/shop");

await Product.deleteMany({});

await Product.insertMany([
  {
    title: "Курс по MongoDB",
    price: 1900,
    tags: ["database", "backend"]
  },
  {
    title: "Консультация по Mongoose",
    price: 3500,
    inStock: false,
    tags: ["mongoose", "nodejs"]
  }
]);

const count = await Product.countDocuments();
console.log("Добавлено документов:", count);

await mongoose.disconnect();

Запуск:

node seed-products.js

Проверка через mongosh:

use shop
db.products.find()

create или insertMany

create() удобен, когда добавляете один документ:

await Product.create({
  title: "Новая книга",
  price: 1200
});

insertMany() удобен для начального заполнения базы несколькими документами. Для учебного seed-скрипта это хороший вариант

Как не испортить структуру данных

Не добавляйте поля как попало. Если в схеме есть price, не используйте рядом cost, amount и sum для того же смысла

Не храните числа строками:

price: "1900"

Лучше:

price: 1900

Не вставляйте ссылки на другие коллекции обычной строкой, если дальше хотите использовать populate(). Для ссылок используйте ObjectId и ref

Частые ошибки

Данные не появляются в базе

Проверьте строку подключения. Возможно, вы записываете не в ту базу:

await mongoose.connect("mongodb://localhost:27017/shop");

Затем в mongosh откройте именно shop

ValidationError

Mongoose остановил запись, потому что данные не подходят под схему. Например, нет обязательного title или price меньше нуля. Это не баг, а защита

insertMany вставил не все документы

Проверьте, нет ли в массиве документа с ошибкой валидации. Для начального seed лучше держать данные небольшими и проверяемыми

Модель пишет не в ту коллекцию

Mongoose сам строит имя коллекции на основе имени модели. Если нужна точная коллекция, задайте ее в схеме или проверьте фактическое имя в MongoDB

Короткий чек-лист

  1. Описать схему.
  2. Указать обязательные поля и типы.
  3. Создать модель.
  4. Подключиться к правильной базе.
  5. Вставить данные через create() или insertMany().
  6. Проверить countDocuments() и db.collection.find().

Что почитать дальше по MongoDB

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

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x