我的MongoDB数据库中有两个表。
1)用户 2)消息
在我的应用程序中,当用户创建“消息”时,我试图将messages
作为数组插入User
表。
为用户和消息定义的模式如下所示
消息方案
var schema = new Schema({
content: {type: String, required: true},
user: {type: Schema.Types.ObjectId, ref: 'User'}
});
用户架构
var schema = new Schema({
firstName: {type: String, required: true},
lastName: {type: String, required: true},
password: {type: String, required: true},
email: {type: String, required: true, unique: true},
messages: [{type: Schema.Types.ObjectId, ref: 'Message'}]
});
我有一个post方法定义如下:
router.post('/', function (req, res, next) {
var decoded = jwt.decode(req.query.token);
User.findById(decoded.user._id, function (err, user) {
if (err) {
return res.status(500).json({
title: 'An error occurred',
error: err
});
}
var message = new Message({
content: req.body.content,
user: user._id
});
console.log("Message:"+ message);
message.save(function (err, result) {
if (err) {
return res.status(500).json({
title: 'An error occurred',
error: err
});
}
user.messages.push(result);
user.save();
console.log('Saved...'+user);
res.status(201).json({
message: 'Saved message',
obj: result
});
});
});
});
这里我首先检查用户是否存在,然后将带有userid
引用的消息发送到“Message”表中,并尝试通过将Message推入列类型来在user表中创建相应的条目接受消息作为数组。
在运行应用程序时,在我的控制台中,我可以看到附加到用户集合的消息对象,如下所示:
但是当我检查我的数据库以查看该消息是否已附加时,它会将消息数组显示为null:
不确定在将数组附加到集合时我出错了。
答案 0 :(得分:1)
做一个小改动:
message.save(function (err, result) {
// ... your other code
user.messages.push(result.id || result._id); // CHANGE THIS LINE
user.save();
console.log('Saved...'+user);
res.status(201).json({
message: 'Saved message',
obj: result
});
});
答案 1 :(得分:0)
我终于通过更新User集合的Schema来实现它。
我更新的架构是 -
var schema = new Schema({
firstName: {type: String, required: true},
lastName: {type: String, required: true},
password: {type: String, required: true},
email: {type: String, required: true, unique: true},
messages: [{type: Schema.Types.ObjectId, ref: 'Message'}]
},
{ usePushEach: true }, // ADDED THIS
);
参考:
https://github.com/Automattic/mongoose/issues/5574#issuecomment-332290518 https://github.com/Automattic/mongoose/issues/5924