#node.js #mongodb #mongoose
#node.js #mongodb #mongoose
Вопрос:
У меня следующая структура документа, и мне нужно добавить к вложенному поддокументу с помощью mongoose:
var organization = module.exports = mongoose.Schema({
teams: [{
permissions: [{ permission: String }]
}]
})
organization.methods.addTeam = function(team){
//the save occurs in a repository layer later on, for now I am just prepping the object for the save
this.teams.push(team);
var subdoc = this.teams[0];
subdoc.isNew;
}
//Ideally, something like this would be great but I have not been able to find any doc that really provides a good example on this scenario
organization.methods.addPermission = function(id(team), permission){
var teams = this.teams.id(id)
teams.permissions.push(permission);
var subsubdoc = teams.permission[0];
subsubdoc.isNew;
}
Я новичок в node.js и mongodb, и я сталкиваюсь со следующей проблемой с вложенными вложенными документами. В следующем примере мне нужно добавить в массив разрешений. Я добавил новый метод в схему организации для обработки добавления команды в организацию в соответствии с примером, который я нашел. Я хотел бы добавить аналогичный метод в схему организации для обработки добавления разрешений к вложенному документу команды. Я также хотел бы проверить и убедиться, что разрешение еще не существует, прежде чем добавлять. Как я должен справиться с этим сценарием?
Ответ №1:
Взгляните на оператор $addToSet в MongoDB.
// file: modules/organization/add_permission.js
var Organization = mongoose.model('Organization');
exports.addPermission = function(teamId, permission) {
Organization.update(
{_id: teamId}, // query
{$addToSet: {permissions: {permission: permission}}}, // update
function(err) { // callback
// handle error
// other logic
}
);
};
Или сделайте что-то подобное в качестве метода в вашей Organization
модели mongoose.