我正在使用MongoDB在数据库系统上工作。我正在尝试保存当前日期和时间,然后如果ID卡上的相同条形码被扫描两次,三次等,则对其进行更新。但是,$ set不会更新该项目。我已经看过MongoDB文档和其他Stack Overflow帖子,但是似乎没有任何效果。其他Stack Overflow帖子建议添加
{ new: true }
和
( overwrite: true }
我分别尝试了这些,但一无所获。
我的代码:
Student.findOne({StudNum: studNum}, function(err, studNumItem) {
if (err) {
res.send("MongoDB Error: " + err);
return false;
}
if (!studNumItem) {
var myData = new Student({ StudNum: studNum, Attendance : 1, LastDateTimeAttended : {
Year: year, Month: month, Day: day, Hours: hours, Min: min, Sec: sec
}});
myData.save()
.then(item => {
res.send("saved to database: " + studNum + ", with attendance " + Attendance + "");
})
.catch(err => {
res.send("unable to save to database: " + studNum + ", for attendance " + Attendance + "");
});
}
else{
var conditions = {StudNum: studNum};
var update = {$inc : { Attendance: 1 }, $set : {
"Year": year, "Month": month, "Day": day, "Hours": hours, "Min": min, "Sec": sec
}};
Student.findOneAndUpdate(conditions, update, { new: true }, function (err)
{
if (err) // If error
{
res.send(err);
}
else {
res.send("Checked in!")
}
});
}
});
我的模式:
var studentSchema = mongoose.Schema({
StudNum: String,
Attendance: Number,
LastDateTimeAttended: {
Year: Number,
Month: Number,
Day: Number,
Hours: Number,
Min: Number,
Sec: Number
}
});
谢谢!
编辑:为了明确起见,保存项目效果很好,但更新项目却不行,更新时也不会引发任何错误。
答案 0 :(得分:1)
就您而言,我不确定这是您找到的问题并进行更新。我相信,由于您要更新的对象是嵌套对象,因此您需要在其顶层添加顶级属性,以使猫鼬保存它。由于这些属性不存在于顶层,因此猫鼬只是将其丢弃。
df$trials
答案 1 :(得分:0)
我建议您尝试将日期保存为字符串。 模型中的LastDateTimeAttended应该包含一个字符串,新的Student构造函数应通过调用来创建LastDateTimeAttended变量
let date = new Date();
LastDateTimeAttended = date.toString();
您的新架构应为
var studentSchema = mongoose.Schema({
StudNum: {type: String, required: true},
Attendance: {type: Number, required: true},
LastDateTimeAttended: {type: String, required: true}
});
然后您应该能够更新mongodb文档 Student.findOneandUpdate(条件,更新,回调)。 see working with mongoose Model.findOneandUpdate