javascript - 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
}
);
解决方案
填充方法不将消息存储为数组。填充是用其他集合中的文档自动替换文档中指定路径的过程。请参阅此以获取更多详细信息
要解决您的问题,请修改对话模式中的消息字段声明
messages: [{
type: mongoose.Schema.Types.ObjectId, ref: 'Message'
}]
推荐阅读
- bots - Telegram bot getUpdates 字段为空,即使我在 Botfather 中禁用了隐私
- java - 如何在JAVA的jasper报告中动态添加表中的行
- c++ - 我试图将一个字符串值从一个变量分配给 C++ 嵌入式汇编程序中的第二个字符串变量,但我得到了错误的操作数类型
- json - 如何从 Sequelize 搜索中读取 JSON 数据?
- node.js - Express.js 将几乎所有内容都路由到一个请求
- python - 使用 Pytube 下载特定长度的播放列表的视频
- mysql - mysql 语句与创建表混淆
- firebase - Firebase 电子邮件触发器扩展:无法附加 pdf 文件
- flutter - Flutter - 显示光标/克拉而不关注文本字段
- javascript - 访问网站时发送网站访问者 IP