#node.js #arrays #json #mongodb #object
Вопрос:
Привет, у меня есть массив объектов, которые выглядят так
[{
"id": 0,
"name": "Del Vecchios | Italian Food | Asheville, NC",
"domain": "delvecchiositalian.com",
"email": "eat@delvecchiositalian.com",
"phone": "828-258-7222",
},
{
"id": 1,
"name": "DeRango's Pizza Palace | Italian Restaurant | Racine, WI",
"domain": "derangos.com",
"email": "info@derangospizzapalace.com",
"phone": "262-639-4112",
},
{
"id": 2,
"name": "Michigan's Premier Flooring Installation Services | D.E. McNabb",
"domain": "demcnabb.com",
"email": "no email",
"phone": "(248) 587-1500",
},
}]
И я хочу сохранить его в своей базе данных mongo, но я не знаю, как создать схему, моя фактическая схема выглядит так
const mongoose = require("mongoose");
const infoSchema = new mongoose.Schema(
{
info: {
type: String,
trim: true,
required: true,
maxlength: 3200
}
},
{ timestamps: true }
);
module.exports = mongoose.model("ScrapedInfo", infoSchema);
и это контроллер для сохранения данных
router.post('/stored', (req, res) => {
const info = new ScrapedInfo(req.body)
info.save((err) => {
if (err) {
console.log(err "error")
}
else{
console.log('saved')
}
});
});
Не знаю, ошибаюсь ли я в контроллере, мне кажется, все в порядке, но я каждый раз, когда нажимаю кнопку для контроллера, у меня есть ошибка проверки rror: требуется путь к информации info
Комментарии:
1. можете ли вы сделать
console.log(req.body)
, каков результат.2. Это объект, содержащий массив объектов, который я показал первым
Ответ №1:
При попытке обновить массив объектов с помощью mongoose вам придется сообщить MongoDB о том, что ожидаются изменения, используя метод markModified(путь). после этого вам придется вызвать метод save ().
пример У нас есть часть схемы passwordsArr в виде массива объектов.
// Пароль изменен
// отметьте путь как имеющий изменения для записи пользователю БД.markModified («Пароль»);
// теперь сохраняет пользователя документа.сохранить(функция (ошибка, пользователь) { если (ошибка) возвращает следующий(ошибка);
Ответ №2:
Ваша схема должна выглядеть примерно так. Ошибка «Требуется информация о пути» вызвана тем фактом, что ключ «информация» не существует в Схеме.
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// Schema
const infoSchema = new Schema(
{
name: {
type: String,
required: true,
},
domain: {
type: String,
required: true
},
email: {
type: String,
required: true
},
phone: {
type: String,
required: true
}
},
{ timestamps: true }
)
// Model
module.exports = mongoose.model('Info',infoSchema)
Если вы хотите сохранить массив, ваш ключ «информация» должен выглядеть следующим образом:
info: {
type: Array,
trim: true,
required: true,
maxlength: 3200
}
Где «тип» — это массив, а не строка.