Застрял на том, как $ push данных во вложенные массивы - PullRequest
0 голосов
/ 14 сентября 2018

У моего основного объекта в моей БД есть свойство, представляющее собой массив из 7 элементов (дней).В каждом дне есть еще один массив ресторанов.

Я изо всех сил стараюсь $ push данных в массиве конкретного дня.

В моей БД я хочу, чтобы структура данных выглядела так

restaurants_cook_for: [
{
    monday: [{
        rest_name: rest_name,
        is_night_or_day_shift: day_or_night,
        turn_off_event: false
    },
    {
        rest_name: rest_name,
        is_night_or_day_shift: day_or_night,
        turn_off_event: false

    }]
},
{
    tuesday: [{
        rest_name: rest_name,
        is_night_or_day_shift: day_or_night,
        turn_off_event: false
    }]
}
]

В моем файле API есть вещи, похожие на это, но.Кажется, я не могу заставить его публиковать данные в массиве в понедельник или вторник и т. Д.

const query = { userid: req.body.userid };
const rest_name = req.body.rest_name;
const day_or_night = req.body.day_or_night;
const dayOfWeek = req.body.day_of_week;
const arrayFilters = { arrayFilters: [{ dayOfWeek: 0 }], upsert: true};

const update = {
    $push: {
        "restaurants_cook_for.$[dayOfWeek]": [{
                rest_name: rest_name,
            is_night_or_day_shift: day_or_night,
                turn_off_event: false
            }]

    }
};

ChefProfile.update(query, update, arrayFilters, (err, raw) => {

    if (err) throw err;
    if (raw) {

        console.log('SUCCESS: ' + JSON.stringify(raw));
        console.log("1 document updated");
        res.sendStatus(200);

    }
});

Файл моей модели сейчас немного уродлив, поскольку я пытаюсь также выяснить способ передачи переменной dayOfWeek исделать это динамичным.В настоящее время я полагаюсь на «strict: false» для этого.

const schemaOptions = {
    collection: "chefs",
    strict: false

};

const ChefProfile = new mongoose.Schema({

    restaurants_cook_for: [{

    }]

}, schemaOptions);

Когда я возиться, я либо не получу ошибок, но ничего не было добавлено, ИЛИ я получу целый новый объект понедельника, когда я действительно простохотел добавить ресторан к списку понедельников.

Я чувствую, что ухожу отсюда.Любая помощь или толчок в правильном направлении будет удивительным!

1 Ответ

0 голосов
/ 14 сентября 2018

Во-первых, вы можете преобразовать массив restaurant_cook_for в объект дней:

restaurants_cook_for: {
    monday: [{
        rest_name: rest_name,
        is_night_or_day_shift: day_or_night,
        turn_off_event: false
    },
    {
        rest_name: rest_name,
        is_night_or_day_shift: day_or_night,
        turn_off_event: false
    }],
    tuesday: [{
        rest_name: rest_name,
        is_night_or_day_shift: day_or_night,
        turn_off_event: false
    }],
    ...
};

А затем в запросе обновите только конкретный день:

const update = {
    $push: {
        `restaurants_cook_for.${dayOfWeek}`: {
            rest_name: rest_name,
            is_night_or_day_shift: day_or_night,
            turn_off_event: false
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...