使用mongodb,node和express将对象存储在数组中

时间:2016-08-13 06:30:55

标签: node.js mongodb

我正在尝试为我的学校项目构建一个消息传递系统。我在mongodb中创建了一个如下所示的模式:

var userSchema = new mongoose.Schema({
  firstName: String,
  lastName: String,
  messages: []
});

我想在看起来与此类似的消息中存储一个对象:

{
 from: 'fromUsername',
 to: 'toUsername',
 time: new Date(),
 msg: 'message is here'
}

我希望能够将它存储在messages数组下的架构中。有没有办法把它推到shcema?不知道如何处理这项任务。谢谢!

2 个答案:

答案 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));
});