Добавление элементов вложенного документа с помощью mongoose

#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.