简体   繁体   English

将 object 添加到 mongoose、mongodb 的子文档中的数组中。 找不到属性“消息”

[英]Adding an object to an array in a sub-document in mongoose, mongodb. Property 'messages` could not be found

I have four models: teacher , student , teacherMessageSchema , studentMessageSchema .我有四个模型: teacherstudentteacherMessageSchemastudentMessageSchema teacherMessageSchema is a subdocument in the 'teacher model in the messages: [teacherMessageSchema] property, and studentMessageSchema is a subdocument in the student model in the messages: [studentMessageSchema] property. How to add an object to arrays teacherMessageSchema是 messages: [teacherMessageSchema] 属性中'teacher model in the子文档:[teacherMessageSchema] property, and studentMessageSchema is a subdocument in the消息中学生model in the的子文档:[studentMessageSchema] property. How to add an object to arrays property. How to add an object to arrays [teacherMessageSchema] and [studentMessageSchema]`. property. How to add an object to arrays [teacherMessageSchema] and [studentMessageSchema]`。 I tried to do this like this:我试着这样做:

module.exports.sendMessage = (req, res) => {
    
    let {sender, receiver, msg} = req.body;
    var hex = /[0-9A-Fa-f]{6}/g;

    sender = (hex.test(sender))? mongoose.Types.ObjectId(sender) : sender;
    receiver = (hex.test(receiver))? mongoose.Types.ObjectId(receiver) : receiver;

    Teacher.findById({_id: receiver}, function(err, member) {
        console.log(member, 'member');

        member.messages.push({msg});

        console.log('messages', member.messages)
        
        member.save(function(err, updated) {
            if (err)
                res.send(err);
    
            res.json(updated, 'updated');
        });
    });
}

But the property messages cannot be found.但是找不到属性messages

teacher and student model师生model

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const crypto = require('crypto');
const {studentMessageSchema, teacherMessageSchema} = require('./message');


const userSchema = new Schema({
    name: {
        type: String,
        trim: true,
        required: true,
        maxLength: 32
    },
    email: {
        type: String,
        unique: true,
        trim: true,
        required: true,
        lowercase: true
    }
}, {timestamps: true});


const studentSchema = userSchema.clone();
studentSchema.add({
    messages : [studentMessageSchema]
});

const teacherSchema = userSchema.clone();
teacherSchema.add({
    messages : [teacherMessageSchema]
});



const User =  mongoose.model('User', userSchema);
const Student = mongoose.model('Student', studentSchema);
const Teacher = mongoose.model('Teacher', teacherSchema);

module.exports = {
    User,
    Student,
    Teacher
}

message model消息 model

const mongoose = require('mongoose');
const Schema = mongoose.Schema;


const messageSchema = new Schema({
    "contentInfo" : {
        "viewed" : {type: Boolean, default: false},
        "msg" : {type: String, required: true},
        "createdAt" : { type : Date, default: Date.now }
    }
});

const studentMessageSchema = messageSchema.clone();
studentMessageSchema.add({
    "receiver" : {
        type: Schema.ObjectId
    }
});

const teacherMessageSchema = messageSchema.clone();
teacherMessageSchema.add({
    "sender" : {
        type: Schema.ObjectId
    }
});


module.exports = {
    messageSchema,
    teacherMessageSchema,
    studentMessageSchema
}

controller message controller 消息

const User = require('../models/user');
const Student = require('../models/user');
const Teacher = require('../models/user');
const mongoose = require('mongoose');

module.exports.sendMessage = (req, res) => {
    
    let {sender, receiver, msg} = req.body;
    var hex = /[0-9A-Fa-f]{6}/g;

    sender = (hex.test(sender))? mongoose.Types.ObjectId(sender) : sender;
    receiver = (hex.test(receiver))? mongoose.Types.ObjectId(receiver) : receiver;

    Teacher.findById({_id: receiver}, function(err, member) {
        console.log(member, 'member');

        member.messages.push({msg});

        console.log('messages', member.messages)
        
        member.save(function(err, updated) {
            if (err)
                res.send(err);
    
            res.json(updated, 'updated');
        });
    });
}

before push msg you must to create message model, after that push it to user.messages在推送msg之前,您必须创建消息 model,然后将其推送到user.messages

let {studentMessageSchema}= require("path of messeages Schema/")


module.exports.sendMessage = (req, res) => {
    
    let {sender, receiver, msg} = req.body;
    var hex = /[0-9A-Fa-f]{6}/g;
    sender = (hex.test(sender))? mongoose.Types.ObjectId(sender) : sender;
    receiver = (hex.test(receiver))? mongoose.Types.ObjectId(receiver) : receiver;

     //create a studentMessage Model
    let studentMessage =  new studentMessageSchema({
      contentInfo : {
          msg : msg
       },
      receiver : receiver
     })


    Teacher.findById({_id: receiver}, function(err, member) {
        console.log(member, 'member');

        member.messages.push({studentMessage });

        console.log('messages', member.messages)
        
        member.save(function(err, updated) {
            if (err)
                res.send(err);
    
            res.json(updated, 'updated');
        });
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM