我正在尝试显示“books”集合中的“name”,我正在尝试用req.paramsbookid获取“bookId”并在“history”数组中显示它,而不是bookId本身,谢谢您的帮助
方法:localhost:3000/users/5f0da88156a370091499406f/borrow/5f0cd134fa4ada27787a5d85
exports.borrowBook=asyncHandler(async(req,res,next)=>{
if (req.params.bookId && req.params.id) {
bookId=req.params._id;
userId=req.params.id;
console.log("userid:"+userId);
const bookName=req.params.bookId;
User.findByIdAndUpdate( userId,{ "$push": { history: {"name":bookName} } },{new:true}).exec();
}
res.status(200).json({success:true,msg:'borrow book'});
})
这是我的藏书
{"_id":{"$oid":"5f0cd134fa4ada27787a5d85"},
"name":"test",
"createdAt":{"$date":"2020-07-13T21:25:08.261Z"},
"slug":"test","__v":0}
这是我的用户集合
{
"name": "Esin Öner",
"history": [{
"name": ["5f0cd134fa4ada27787a5d85"],
"_id": {
"$oid": "5f0daa930643d71380071627"
}
}, {
"name": ["5f0cd134fa4ada27787a5d85"],
"_id": {
"$oid": "5f0dbca1c0402b1aa472b218"
}
}],
"__v": 0
}
为了在用户文档的历史数组中插入图书名称而不是图书id,您需要首先根据bookID
查找图书。
然后使用FindOneAndUpdate
方法更新用户文档的History
数组。
此外,FindOneAndUpdate
方法的实现也存在问题。 FindOneAndUpdate
方法的第一个参数是对象
,而不是参数(引用)。
您需要进行以下更改以获得所需的结果:
exports.borrowBook=asyncHandler(async(req,res,next)=>{
try {
if (req.params.bookId && req.params.id) {
bookId=req.params._id;
userId=req.params.id;
console.log("userid:"+userId);
const bookName=req.params.bookId;
const bookRecord = await Books.find({"_id": bookId});
await User.findByIdAndUpdate( {"_id": userId},{ "$push": { history: {"name":bookRecord.name} } },{new:true}).exec();
}
} catch(e) {
console.log(e);
res.status(400).send(e);
}
res.status(200).json({success:true,msg:'borrow book'});
})