Как исправить 'У меня есть схема автора и книги. В результате в Почтальоне я хочу показать двух или более авторов для книги' - PullRequest
0 голосов
/ 06 октября 2019

Я хочу, чтобы результат почтальона был таким

[{
 title:
 year:
 rating:
 authors: [{
    name: 
    birthday:
    country: 
  }]
}]

Я хочу двух или более авторов, но у меня есть только один автор

 model/book.js

  const mongoose = require('mongoose');
  const authorSchema = require('../models/author');


 const bookSchema = new mongoose.Schema({
   title:{
       type:String,
       required:true,
       min: 5,
       max: 50
   },
   rating:{
       type: Number,
       required: true,
       min:0,
       max:10
   },
   authors: {
       type: authorSchema,
       required: true
   },

 });
   const Book= new mongoose.model('Book', bookSchema);



route/book.js

router.get('/', async(req, res)=>{
    const books= await Book
    .find({}, { _id:0, __v:0 })
     res.send(books);
});  

router.post('/', async(req, res)=>{
const author = await Author.findById  (req.body.authorId);
if(!author) return res.status(400).send('Invalid Author');

let book= new Book({
    title: req.body.title,
    rating: req.body.rating,
    authors:[{
        name: author.name,
        birthday: author.birthday,
        country: author.country
    }]
});

book= await book.save();
res.send(book)

});
module.exports =router;

Я ввожу это методом POST в почтальон
{"title": "Learn Python", "rating": "9", "authorId": ["5d99ac95f17917117068631b", "5d99ad75c4edd61f98af740b"]
}

тогда я получаю только первого автора,авторский массив не отображается

1 Ответ

0 голосов
/ 06 октября 2019

findById находит один документ по указанному полю _id

Используйте find с $ в , чтобы сопоставить количество документов с массивомиз _id.

Author.find({ $in: req.body.authorId }) предоставит вам массив авторов, совпадающих с req.body.authorId.

, а затем создаст массив авторов, циклически повторяя результат запроса find для вашегоnew Book экземпляр.

Предложение

Используйте только те поля, которые требуются для запроса find - например, Author.find({ $in: req.body.authorId }, 'name birthday country'),

также,если у вас есть другая коллекция Author, лучше хранить ссылку (_id) в коллекции Book, а не передавать сведения об авторе, это удалит избыточность данных из ваших коллекций. Вы можете узнать больше о моделировании данных в mongodb здесь

...