我有以下架构用于"群组"采集。我希望能够创建此记录并推送任意数量的"成员"首次创建时,该组。我无法得到"成员"保存记录时填充的字段。保存所有其他字段没有问题。
var groupSchema = mongoose.Schema({
creator : String,
name : String,
members: [{
type: String,
ref: 'User'
}],
created : {
type: Date,
default: Date.now
}
});
app.post('/create-group', function(req, res) {
//req.body.users = ['12345', '23456', '34567'] for example
var group = new Group({
name : req.body.group_name,
creator : req.user._id,
members: {$push: req.body.users}
});
group.save(function (err, data) {
if (!err) {
return res.json(data);
}
});
});
即使所有其他字段都已正确保存,也不会在"成员"中存储任何结果。我做错了什么?
答案 0 :(得分:0)
修改强>
在您的架构中编写ref:“User”时,这意味着您必须提供User架构而不是字符串或整数。如果你只想要一个字符串数组,你可以简单地使用[String]。
根据文档,您必须使用objectID http://mongoosejs.com/docs/populate.html
members: [{ type: Schema.Types.ObjectId, ref: 'User' }]
在上面提供的链接中,您可以查看如何保存论坛以及添加任意数量的成员。
答案 1 :(得分:0)
members: [{ type: Schema.Types.ObjectId, ref: 'User' }]
正如Su4p指出的那样。不要担心req.body.users
包含字符串而不是ObjectIds。 mongoose
会将字符串转换为objectID。
还有另一个错误,
members: {$push: req.body.users}
应该是
members: req.body.users
$push
是一个更新运算符。它不适用于分配数组。