Как сохранить массив объектов в мангусте?

#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
        }
 

Где «тип» — это массив, а не строка.