2016-08-13 32 views
1

我正在尝试为我的学校项目构建一个消息传递系统。我创建MongoDB中的模式,看起来像这样:使用mongodb,node和express存储数组中的对象

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

我想存储在消息的对象,看起来类似于这样:我希望能够存储

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

在消息数组下的模式中。有没有办法将它推到shcema?不知道如何处理这个任务。谢谢!

回答

0

您可以使用th $push运算符将您的对象值附加到消息数组中。

如何使用$推你userSchema

// 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'}} 
    }) 
+0

请问您能否澄清此代码的放置位置?我不确定如何使用这段特定的代码,或者如何从角度前端调用此代码。非常感谢您的帮助! –

+0

您需要将这部分代码放入nodejs服务器的路由中(让服务器向db而不是客户端发出请求)。在角度前端中,使用正文中的消息对象向服务器发出$ http POST请求。 – NotBad4U

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); 

给定的信息添加到消息数组,遵循的模式:

// 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)); 
}); 
+0

嘿,那里,谢谢你的回复!我对平均堆栈很陌生。我在查看服务器内如何处理时遇到问题。用户和用户都会将他们的消息添加到他们的消息数组中吗?因此,如果用户a发送给用户b,那么用户a和用户b都会在“messages:[messageSchema]”中输入消息吗?谢谢! –

相关问题