我正在尝试为我的学校项目构建一个消息传递系统。我在mongodb中创建了一个如下所示的模式:
var userSchema = new mongoose.Schema({
firstName: String,
lastName: String,
messages: []
});
我想在看起来与此类似的消息中存储一个对象:
{
from: 'fromUsername',
to: 'toUsername',
time: new Date(),
msg: 'message is here'
}
我希望能够将它存储在messages数组下的架构中。有没有办法把它推到shcema?不知道如何处理这项任务。谢谢!
答案 0 :(得分:0)
您可以使用$push
运算符将对象值附加到消息数组中。
如何对您的userSchema使用$ push的示例
// How to update a user already created
var User = mongoose.model('User');
User.update(
{ _id: id },
{ $push: {messages : {
from: 'fromUsername',
to: 'toUsername',
time: new Date(),
msg: 'message is here'}}
})
答案 1 :(得分:0)
您可以单独定义模式,并将消息模式作为用户文档的一部分嵌入(作为消息数组中的项目):
var messageSchema = new mongoose.Schema({
from: String,
to: String,
time: { type: Date, default: Date.now },
msg: String
})
var userSchema = new mongoose.Schema({
firstName: String,
lastName: String,
messages: [messageSchema]
});
mongoose.model('User', userSchema);
要将给定消息添加到messages数组,请遵循以下模式:
// retrieve user model
var User = mongoose.model('User');
// create user instance
var user = new User({
firstName: 'Alice',
lastName: 'Bob'
});
// create a message
user.messages.push({
from: 'fromUsername',
to: 'toUsername',
msg: 'message is here'
});
您可以选择排除时间字段,因为在保留模型时已经定义了默认值。
user.save(function (err, user) {
if (!err) console.log(JSON.stringify(user, null, 4));
});