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