我在MEAN.js上运行,并且在将新的子文档推送到现有数据库条目时遇到了问题。到目前为止我做了什么: 我有一个以下数据库架构:
var GameSchema = new Schema({
title: {
type: String,
trim: true,
required: 'Title cannot be blank',
unique: 'Title must be unique'
},
invitedPlayers: [{
email: {
type: String
},
resources: {
wood: {
type: Number,
default: 0
},
stone: {
type: Number,
default: 0
},
gold: {
type: Number,
default: 0
}
}
}]
});
mongoose.model('Game', GameSchema);
我希望将新条目推送到invitePlayers。每当管理员填写带有用户邀请的表单并单击提交时,应用程序将使用此方法:
// Invite new User
$scope.invite = function() {
// Create new Game object
var game = new AdminGamesService ({
_id: $stateParams.gameId,
invitedPlayers: $scope.player,
});
game.$update(function() {
$location.path('admin/users');
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
};
并在服务器上运行它(_
- 使用lodash):
// Update game
exports.update = function(req, res) {
var game = req.game ;
game = _.extend(game , req.body); //here should be something that merge arrays instead of replacing them?
game.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(game);
}
});
};
但是这整个代码覆盖了我的早期邀请玩家,并且只添加了新的代码:(我必须改变一些东西来推送阵列邀请玩家,但我不知道是什么:)
答案 0 :(得分:0)
问题是lodash _extend覆盖数组,所以我在更新函数中做了一些更改,现在它可以工作了:
exports.update = function(req, res) {
var game = req.game;
var invitedPlayers = game.invitedPlayers;
if(req.body.invitedPlayers) invitedPlayers.push(req.body.invitedPlayers);
game = _.extend(game , req.body);
game.invitedPlayers = invitedPlayers;
game.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(game);
}
});
};