Как я могу заполнить имя моих элементов из массива в mon goose с помощью objectid - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь показать «имя» из коллекции «books», я пытаюсь получить «bookId» с помощью req.paramsbookId и показать его в массиве «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 Ответ

1 голос
/ 14 июля 2020

Для вставки имени книги вместо идентификатора книги в массив истории документа пользователей вам потребуется сначала найти книгу на основе bookId.

А затем использовать findOneAndUpdate для обновления массива history документа пользователя.

Кроме того, существует проблема с вашей реализацией метода findOneAndUpdate. Первым аргументом метода findOneAndUpdate является object вместо параметра (ссылка) .

Вам необходимо внести следующие изменения, чтобы получить желаемый результат:

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'});
})
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...