提问者:小点点

如何使用objectid从mongoose数组中填充元素名称


我正在尝试显示“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

}


共1个答案

匿名用户

为了在用户文档的历史数组中插入图书名称而不是图书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'});
})