【问题标题】:Mongoose only saves array of object _id valueMongoose 只保存对象 _id 值的数组
【发布时间】:2019-03-05 15:40:57
【问题描述】:

我正在尝试将消息数组发布到 mongoose 数据库,但它只保存 _id 属性而不是 content 和 sender 属性。我做错了什么?

组架构:

var GroupSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        minlenght: 1,
        trim: true
    },
    messages: {
        type: [{type: Schema.ObjectId, ref: 'Message'}]
    },
    _creator: {
        type: mongoose.Schema.Types.ObjectId,
        required: true
    }
});

消息架构:

var MessageSchema = new mongoose.Schema({
    content: {
        type: String,
        required: true,
        minlenght: 1,
        trim: true
    },
    sender: {
        type: String,
        required: true
    }
});

POST /rooms 路由而不保存

const messages = [];
for (const m of req.body.messages) {
    messages.push(new Message(m));

}

var group = new Group({
    name: req.body.name,
    _creator: req.user._id,
    messages: messages
});

JSON data in postman

When I run GET I only get back the messages objectID values

【问题讨论】:

  • 你是说你的GroupSchema 只保存消息ID?
  • 是的,在下面的第二张图片中可以看到
  • 那是因为GroupSchema 只保存MessageSchema 模式记录的引用ID。你会在MessageSchema中找到对应的contentsender

标签: node.js mongoose


【解决方案1】:

这是设计使然。您的 GroupSchema 和您的 MessageSchema 之间有交叉引用,通过:

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

这意味着GroupSchema/messages包含与您的 Messages 集合交叉引用的消息的 ObjectId。

您需要使用populate 来加载实际的文档。

ref 选项告诉 Mongoose 在使用哪个模型 人口。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2022-01-15
    • 2021-08-13
    相关资源
    最近更新 更多