猫鼬populate()返回未定义

编程入门 行业动态 更新时间:2024-10-13 08:18:16

猫鼬populate()返回<a href=https://www.elefans.com/category/jswz/34/1771258.html style=未定义"/>

猫鼬populate()返回未定义

我正在尝试与node.js,Express和MongoDB创建聊天。我有两种猫鼬模型:用于聊天室和消息。

房间模型:

const RoomSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    owner: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Users',
        required: true,
    },

    messages: {
        type: [mongoose.Schema.Types.ObjectId],
        ref: 'Messages',
        required: true,
    },
    users: {
        type: [mongoose.Schema.Types.ObjectId],
        ref: 'Users',
        required: true,
    },


});

const Room = mongoose.model('Rooms', RoomSchema);

消息模型:


const MessageSchema = new mongoose.Schema({
    text: {
        type: String,
        required: true,
    },
    sendBy: {
        type: String,
        required: true
    }

});

const Messages = mongoose.model('Messages', MessageSchema);

和显示所有消息的功能

prepareMessages: function (name, callback) {
        rooms.findOne({
            name: name,
        }).populate('messages')
            .exec(function (err, room) {
                let result = '';
                if (!room) {
                    console.log("Chat does not exist");
                    throw err;
                }
                else {

                    room.messages.forEach(function (item, i, arr) {
                        result += '<dt>' + item.sendBy + '</dt>';
                        result += '<dd>' + item.text + '</dd>';
                    });
                }
                callback(result)
            });
    },

我为什么得到

TypeError: Cannot read property 'sendBy' of undefined

我尝试过.populate('rooms.messages').populate({path: 'rooms.messages', model:'Messages')和其他变体,但仍然无法使用。请帮帮我!

回答如下:

在“房间模式”中,您将消息定义为对象类型为ObjectId的对象,虽然它应该是元素数组,每个元素都为ObjectId类型,消息应该是ObjectIds数组,并且用户为好

const RoomSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    owner: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Users',
        required: true,
    },

    messages: [{ // note here messages is an array
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Messages',
        required: true,
    }],
    users: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Users',
        required: true,
    }],


});

const Room = mongoose.model('Rooms', RoomSchema);

希望有帮助

更多推荐

猫鼬populate()返回未定义

本文发布于:2024-05-07 08:05:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755301.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:未定义   猫鼬   populate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!