猫鼬:查询一对多的关系,但反过来

时间:2018-01-12 21:04:07

标签: node.js mongodb express mongoose

我正在用MongoDB / Mongoose / Node.js RESTapi做一个应用程序。

我有两个模型:书籍和作者。

作者可以写很多书。只有一本书可以由作者撰写。

模型定义如下。

作者模型

var authorSchema = new Schema({
name: {type: String, required: true},
surname: {type: String, required: true},

图书模型

var bookSchema = new Schema({
    isbn: {type: String, required: true},
    title: {type: String, required: true},
    author: {type: Schema.Types.ObjectId, ref: 'Author'},
    description: {type: String}

我想做的是获取作者写的书。这是我的API端点。 IdAuthor是mongodb给出的id。

book-routes.js

localhost:3000/api/book/author/:idAuthor

router.get('/author/:idAuthor', (req, res, next) => {

    let idAuthor = req.params.idAuthor;

    Book.find({ author: idAuthor })
        .select('isbn title author description')
        .exec()
        .then(bookCollection => {
            const response = {
                count: bookCollection.length,
                books: bookCollection
            }

            if (response.count) {
                res.status(200).json(bookCollection);
            } else {
                res.status(200).json({
                    message: 'This author does not have any book'
                });
            }
        })
        .catch(err => {
                res.status(500).json({
                    error: err
                });
        });
    });
可悲的是,它总是返回一堆空书。我确信它有关于“作者”属性引用作者模型的事情。

我也试过这样做:

Book.find({ author: ObjectId(idAuthor) })
没有运气。

感谢您的帮助!

0 个答案:

没有答案