为了账号安全,请及时绑定邮箱和手机立即绑定

Node.js:猫鼬 .populate() 不显示数据

Node.js:猫鼬 .populate() 不显示数据

开心每一天1111 2021-12-02 19:41:51
我正在尝试显示数据库中的数据。我有 3 个架构,将所有架构合二为一。但是,组合数据没有显示。我附上了我的 3 架构。async-wait 与 try-catch 一起工作正常,这对我来说似乎很干净。我也尝试关注mongoose populate。两者都返回相同的结果。需要说明的是:我是新手。因此,不要对要遵循的最佳实践有很好的了解。书籍架构:const mongoose = require('mongoose');const Schema   = mongoose.Schema;const BookSchema = new Schema({    title: {        type     : String,        required : [true, 'Book Title is Required'],        max      : 100,        min      : 5,        trim     : true,        lowercase: true    },    author: {        type    : Schema.Types.ObjectId,        ref     : 'Author',        required: [true, 'Author is Required']    }    genre: [{        type: Schema.Types.ObjectId,        ref : 'Genre'    }]}, { collection : 'book', timestamps: true });BookSchema.virtual('url').get(() => {    return 'book/' + this._id;});module.exports = mongoose.model('Book', BookSchema);作者架构:const mongoose = require('mongoose');const Schema   = mongoose.Schema;const AuthorSchema = new Schema({    firstName: {        type     : String,        required : [true, 'First Name is Required'],        max      : 100,        min      : 5,        trim     : true,        lowercase: true    },    lastName: {        type     : String,        required : [true, 'Last Name is Required'],        max      : 100,        min      : 5,        trim     : true,        lowercase: true    }}, { collection : 'author', timestamps: true });AuthorSchema.virtual('name').get(() => {    return this.firstName + this.lastName;});module.exports = mongoose.model('Author', AuthorSchema);流派架构:const mongoose = require('mongoose');const Schema   = mongoose.Schema;const GenreSchema = new Schema({    name: {        type     : String,        required : [true, 'Genre Name is Required'],        max      : 100,        min      : 3,        trim     : true,        lowercase: true    }}, { collection : 'genre', timestamps: true });module.exports = mongoose.model('Genre', GenreSchema);URL 未附加 ID作者数据未显示如果我使用 .populate(),那么。它正在显示(南)如果我不使用填充,它不会返回任何内容预期输出: 猿和天使(约翰)当前输出: 猿和天使(NaN)
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

请尝试以下代码。我认为,它会起作用


exports.bookList = async(req, res, next) => {

    try {

        const bookList = await Book.find({}).populate('author').exec((error, list) => list);


        res.render('./book/index', { title: 'Book List', bookList: bookList});

    } catch (error) {

        res.status(500).json({ message: error.message });

    }

};


查看完整回答
反对 回复 2021-12-02
?
当年话下

TA贡献1890条经验 获得超9个赞

在我的查询中,我只需要添加回调,如:


exports.bookList = async(req, res, next) => {

    try {

        const bookList = await Book.find({}).populate('author').exec((err, bookList) => {

            if (err) return bookInstanceList;


            // console.log(bookList);


            res.render('./book/index', { title: 'Book List', bookList: bookList});

        });


    } catch (error) {

        res.status(500).json({ message: error.message });

    }

};

主要问题是 Schema 中的箭头函数。我使用箭头函数来获取对象。但是,箭头函数不适用于对象。

查看完整回答
反对 回复 2021-12-02
  • 2 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信