首页 > 解决方案 > 基于另一个字段的猫鼬更改日期

问题描述

所以这是我的问题。我正在编写一个应用程序,课程应用程序,但我碰壁了。我的问题是,每当用户向数据库添加新课程时,它会自动设置两个名为startingDateand的字段nextClasses。开头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工作以及应该传递哪些参数,但我不知道如何从另一个字段传递值以使其工作。

标签: node.jsmongodbmongoose

解决方案


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

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

推荐阅读