【发布时间】:2018-06-02 22:39:08
【问题描述】:
我正在使用 Nodejs 在后端和 MongoDB 作为数据库来制作图书馆管理应用程序。它是一个简单的 express 服务器,使用 mongoose 库。必须发行一本书的客户发送一个 POST 请求,并将其记录添加到数据库中。这是我的日志模型:
var Logs = mongoose.model('Logs', {
bookid: {
type: Number,
required: true,
minlength: 1
},
status: {
type: String,
required: true,
minlength: 1,
trim: true
},
details: [{
issuedby: {
type: String,
trim: true
},
issuedate: {
type: Date,
},
returndate: {
type: Date
}
}]
});
现在当收到 POST 请求时,我尝试将 book 的“status”从“Available”更改为“Issued”,并在“details”字段中添加客户的记录。这是代码:
app.post('/issueBook', (req,res) => {
console.log(req.body);
Logs.findOne({bookid: req.body.bookid}).then((doc) => {
if(doc.status == "Available"){
var detail = {};
detail.issuedby = req.body.issueTo;
detail.issuedate = new Date();
Logs.findOneAndUpdate({bookid: req.body.bookid}, {$set: {status:"Issued"}}, {$push: {details:detail}}, {upsert: true}, function(err,doc) {
if(err) {
console.log("Couldn't issue");
res.status(400).send(err);
} else{
res.send("OK");
}
});
} else{
res.send({
status: "Error",
reason: "Book already issued !"
});
}
}, (e) => {
res.send({
status: "Error",
reason: "Invalid Book ID !"
});
});
});
当我发送这个 POST 请求时服务器崩溃。检查数据库时,我发现“状态”字段成功地从“可用”更改为“已发布”,但“详细信息”中没有插入记录。我的查询有问题吗?请对我的代码提出更正建议。
这是崩溃时的错误 sn-p:
终端中的错误如下所示:
【问题讨论】:
-
所有更新修饰符都放在单个文档中。类似
Logs.findOneAndUpdate({bookid: req.body.bookid}, {$set: {status:"Issued"}, $push: {details:detail}}, {upsert: true}...
标签: arrays node.js mongodb mongoose