Правильно заполнить 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
Короткий чек-лист
- Описать схему.
- Указать обязательные поля и типы.
- Создать модель.
- Подключиться к правильной базе.
- Вставить данные через
create()илиinsertMany(). - Проверить
countDocuments()иdb.collection.find().
Что почитать дальше по MongoDB
Если нужен общий маршрут по теме, откройте рубрику MongoDB. Для соседних задач пригодятся эти разборы:
- Node.js и MongoDB: как правильно закрывать client.close
- Как организовать базу MongoDB с использованием Mongoose
- Как правильно составить запрос в MongoDB
- Discord bot на Python и MongoDB: как задать проверку



