首页 > 解决方案 > Mongoose 的填充方法只存储一个 Object

问题描述

我正在尝试访问存储在我的对话模型中的消息模型数组。但是,当我使用 populate 方法尝试将 Message 模型存储为数组时,只显示第一个 Message。

socket.on('connected', function (data) {
      //load all messages
      const filter = { roomId: data.roomid };
      (async () => {
        console.log('searching for Schema');
        let conversation = await Conversation.findOne(filter)
          .populate('messages')
          .exec(function (err, message) {
            if (err) console.log('no schema found');
            var array = message.messages;
            console.log(array);
            // printing only first Message
          });
      })();
    });

对话模式

const ConversationSchema = new mongoose.Schema(
    {
        roomId: {
            type: String,
            required: true
        },
        messages: {
            type:  mongoose.Schema.Types.ObjectId, ref: 'Message' 
        }
    },
    {
        timestamps: true
    }
);

标签: javascriptnode.jsreactjsmongodbmongoose

解决方案


填充方法不将消息存储为数组。填充是用其他集合中的文档自动替换文档中指定路径的过程。请参阅此以获取更多详细信息

要解决您的问题,请修改对话模式中的消息字段声明

messages: [{
            type:  mongoose.Schema.Types.ObjectId, ref: 'Message' 
        }]

推荐阅读