我仍然试图摆脱SQL模式,这可能是这是一个架构问题而不是实现的原因,但我不能为我的生活弄清楚如何完成我想要达到的功能。Mongoose模型不保存数组
我有一个架构,为用户。它可以毫无麻烦地将用户用mongoose保存到mongoDB中。它包含沿用户名,密码等行的通用东西。
然而,我们有一个新的属性进入到模式模型,这被称为成就,并且是来自另一个模式的成就数组。它在用户模式中声明如下:
var UserSchema = new Schema({
_id : { type: String, unique: true },
group_id : { type: String, required: true },
username : { type: String, required: true },
achievements : { type: Array }
});
在UserSchema.save,我找了成果模型得到的匹配相同group_id
是成就一个数组,如下所示:
exports.create = function(req, res, next) {
var newUser = new User(req.body);
// Populate the achievements (same group_id)
Achievement.find()
.where({ group_id: newUser.group_id })
.select({ _id: 1 })
.exec()
.then(function(achievementsForGroupArray) {
_.forEach(achievementsForGroupArray, function(achievementForGroup) {
newUser.achievements.push(achievementForGroup);
});
})
.catch(function(err) {
return res.status(400).send(err).end();
})
newUser.save(function(err, user) {
// .. generic validation stuff ..
}
现在,在上面,即使用直接推回返回的数组来取代forEach()
也不起作用,甚至只需按下'test'
即可取代推送,但仍然无法填充它。
当我在console.log newUser
保存之前,他们在那里。当我console.log的user
部分newUser.save(function(err, user)
没有任何成就。
我的模式安装不正确,所以Mongoose/MongoDB只是放弃它,因为它不是match
正确的类型?
编辑:我确定有结果,因为当我控制台登录他们,我可以看到他们在foreach里面。
你可以在这里放置“achievementForGroupArray”对象吗? –