坚持如何将数据推入嵌套数组

时间:2018-09-14 06:38:50

标签: node.js mongodb

在数据库的主对象上,我有一个属性,该属性是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 :(得分:0)

首先,您可以将Restaurants_cook_for数组转换为days对象:

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