Javascript 在mongoose、mongodb的子文档中将对象添加到数组中。财产';找不到消息“”
我有四种模式:Javascript 在mongoose、mongodb的子文档中将对象添加到数组中。财产';找不到消息“”,javascript,mongodb,express,mongoose,mongoose-schema,Javascript,Mongodb,Express,Mongoose,Mongoose Schema,我有四种模式:teacher,student,teacherMessageSchema,studentMessageSchemateacherMessageSchema是messages:[teacherMessageSchema]属性中“教师模型”中的子文档,studentMessageSchema是messages:[studentMessageSchema]属性中student模型中的子文档。如何将对象添加到数组[teacherMessageSchema]和[studentMessageS
teacher
,student
,teacherMessageSchema
,studentMessageSchema
teacherMessageSchema
是messages:[teacherMessageSchema]属性中“教师模型”中的子文档,
studentMessageSchema是
messages:[studentMessageSchema]属性中
student模型中的子文档。如何将对象添加到数组
[teacherMessageSchema]和
[studentMessageSchema]`。我试着这样做:
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');
});
});
}
但是找不到属性messages
教师和学生模型
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
}
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
}
消息模型
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
}
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
}
控制器消息
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');
});
});
}
在推送msg
之前,您必须创建消息模型,然后将其推送至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');
});
});
}
当您在db中插入学生和教师时,是否设置了一条消息:[]为模式归档?@MohammadYaserAhmadi yes。例如,当学生注册时,我在数据库mongodb中看到添加了属性消息。它是arrayismsg
messageSchema的一个模型?还是字符串?@MohammadYaserAhmadi在消息模式中我定义了两个模式。我拿走了一个,你现在能看吗?我有模型留言。看看我的代码“messageSchema”,例如,在学生模式中,您定义了messages:[studentMessageSchema]
,这样您就可以在messages字段中推送studentMessageModel
,但您需要一个{msg}
推送它(即msg
只是一个字符串),在推送msg
创建模型之前,我更新了我的答案。我有错误:MongooseError[ObjectParameterError]:Document()的参数“obj”必须是对象,获得了
准确地说,从“receiver”中查找所有id(在数组消息中)属性,在获取所有Id的教师后,基于Id的教师,您可以从教师处获取额外数据如果您有一个消息模型,并且该模型有一个接收方和发送方,您可以在消息模型中搜索,但在这种方法中是不可能的