Javascript 接近使用每日数据库条目的自动化系统

Javascript 接近使用每日数据库条目的自动化系统,javascript,mongodb,database-design,meteor,Javascript,Mongodb,Database Design,Meteor,我正在研究一个系统来管理寄宿学校的学生,它取代了不必要的繁杂的文书工作。作为其中的一部分,一些学生不是寄宿生,因此每天离开学校回家。文书工作系统包括每天打印一份非寄宿学生的名单,学生们在离开时进行核对 我用Meteor复制了这个系统,但我相信我的系统存在根本性的缺陷,至少它极易出现错误。我创建了一个“票证”数据库。每张票都记录了一个非寄宿学生在某一天的历史。为了初始化票据,服务器每天午夜使用cron作业执行以下函数 function insertDailies() { console.log("

我正在研究一个系统来管理寄宿学校的学生,它取代了不必要的繁杂的文书工作。作为其中的一部分,一些学生不是寄宿生,因此每天离开学校回家。文书工作系统包括每天打印一份非寄宿学生的名单,学生们在离开时进行核对

我用Meteor复制了这个系统,但我相信我的系统存在根本性的缺陷,至少它极易出现错误。我创建了一个“票证”数据库。每张票都记录了一个非寄宿学生在某一天的历史。为了初始化票据,服务器每天午夜使用cron作业执行以下函数

function insertDailies() {
console.log("Daily Tickets Generated")
var dailyStudents = Meteor.users.find({"profile.daily": true}); //Insert all daily students
dailyStudents.forEach(function(dailyStudent) {
    Dailies.update({ //Dailies is a collection of these tickets 
            student: dailyStudent,
            date: today().toDate() //Using moment.js
        }, {
            $setOnInsert: {
                student: dailyStudent,
                date: today().toDate(),
                left: false,
                dinner: false,
                stayLate: false,
                sleep: false,
                room: null
            }
        }, {
            upsert: true
    });
});
}

其中,
晚餐
睡眠
睡眠
是每个学生可以拥有的四种非互斥状态

目前的系统是可以接受的,只是它非常容易出现错误并且不可靠——在某些情况下,系统会为每个学生生成两张票。午夜后不久,在UTC以外的时区访问系统时,票证有时根本不会出现。大量其他与时间相关的bug似乎是由于将系统与日期绑定而导致的


是否有更好的、更能抵御错误的方法来跟踪每个学生每天一次的状态?时间依赖性(而不是像大多数其他操作一样的事件驱动依赖性)是否会迫使不可靠性继续存在,即使我用其他东西替换了当前系统?

您是否尝试在凌晨3点运行cronjob以查看它是否修复了一些时间问题?更新/访问票证是什么样子的?为什么不直接创建它们,因为这四个状态会随着一次插入而改变呢?
today()
正在做类似于
moment()的事情。startOf('day')
?@jeff,我有过,但这并没有带来显著的改善。系统不可靠。@MatthewForr,upsert是为了防止创建重复的票据(因为它与setOnInsert结合在一起)。如果该学生的票证已经存在,它将重置数据,而不是创建一个完整的新票证。