猫鼬基于其他字段的更改日期

时间:2020-01-14 20:22:57

标签: node.js mongodb mongoose

所以这是我的问题。我正在编写一个应用程序,课程应用程序,但是遇到了麻烦。我的问题是,每当用户向数据库中添加新课程时,它都会自动设置两个名为startingDatenextClasses的字段。在nextClasses字段的开头等于startingDate,但我想每周定期更改该日期。因此,例如,课程从1月11日开始,在星期日和星期一之间的晚上,每个文档的日期都会更新为第18日。我的问题是我不知道如何编写updateMany代码来更改这些值。我知道我必须使用某些库来更新该日期,例如nodejs cron,但无法弄清楚updateMany的样子。

这是我的courseModel

const mongoose = require('mongoose');

const courseSchema = new mongoose.Schema({
    name: {
        type: String,
        trim: true,
        required: true
    },
    owner: {
        type: mongoose.Schema.Types.Object,
        // required: true,
        owner: {
            name: String,
            email: String
        }
    },
    startingDate: {
        type: Date
    },
    nextClasses: {
        type: Date
    },
    students: [
        {
            type: mongoose.Schema.Types.Object,
            required: true,
            trim: true
        }
    ]
});

const Course = mongoose.model('Course',courseSchema);

module.exports = Course;

我无法更新数据的路线。

router.patch('/course/updateTime',async(req,res) => {
    try {

        const data = await Course.updateMany({"nextClasses": whatShouldIPutHere},
            { $set: {"nextClasses": new Date() }});
    } catch(e) {
        console.log(e);
    }
});

我了解updateMany的工作原理以及应该传递的参数,但是我不知道如何从另一个领域传递价值来实现这一目标。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。检查考虑哪个日期的附加条件:)

const courses = await Course.find({});
            courses.forEach(course => {
                Course.updateMany({"nextClasses": course.nextClasses === course.startingDate ? course.startingDate : course.nextClasses},
                    {$set: {"nextClasses": new Date()}},(err) => console.log(course.nextClasses)
                )
            });