2017-10-17 11 views
1

J'ai une action qu'ils sont Afficher, modifier, supprimer, ajouter pour chaque pages.Besoin d'effectuer une opération de poussée dans mongodb ne fonctionne pas

var roleprivilege = { 
      'role_name' : req.body.role_name, 
      'add':req.body['add'], 
      'del':req.body['del'], 
      'view':req.body['view'], 
      'edit':req.body['edit'], 
       } 

J'utilise findOneAndUpdate

mongo.role.findOneAndUpdate({'_id': id},roleprivilege,{upsert: true,new : true},function(err, response) { 
       console.log("Inserted"); 
      }); 

Son travail bien, mais je dois stocker tous les add, del, modifier, vue de l'intérieur rôle. J'ai essayé comme ça

var roleprivilege = { 
      'role_name' : req.body.role_name, 
      'role':{ 
      'add':req.body['add'], 
      'del':req.body['del'], 
      'view':req.body['view'], 
      'edit':req.body['edit'] 
       } 
      } 

Ici, le problème est que si je choisis une seule valeur dans l'action, il est magasin comme une chaîne

Et mon avis est ici

 <div class="col-md-12 role_class" ng-repeat="menu in privilege_menu" > 
      <div class="col-md-2">{{menu}}</div> 
      <div class="col-md-10" ng-int="{{l_name =(menu|lowercase)}}"> 
      <span class="role_checkbox"> <label class="control control--checkbox">View 
       <input type="checkbox" ng-checked="check_role(l_name,'view')" name="view" value="{{menu|lowercase}}" /> 
       <div class="control__indicator"></div> 
       </label></span> 
      <span class="role_checkbox" > <label class="control control--checkbox">Add 

        <input type="checkbox" name="add" value="{{menu|lowercase}}" /> 
        <div class="control__indicator"></div> 
       </label></span> 
      <span class="role_checkbox"> <label class="control control--checkbox">Edit 
        <input type="checkbox" name="edit" value="{{menu|lowercase}}" /> 
        <div class="control__indicator"></div> 
       </label></span> 
      <span class="role_checkbox"> <label class="control control--checkbox">Delete 
        <input type="checkbox" name="del" value="{{menu|lowercase}}" /> 
        <div class="control__indicator"></div> 
       </label></span> 
      </div> 
     </div> 

je besoin d'une sortie en ci-dessous le format

{ 
    "_id" : ObjectId("592817d6f6d6dd35c381bb0d"), 
    "role_name" : "TSE", 
    "role" : { 
     "view" : [ 
      "dashboard", 
      "settings", 
      "users", 

     ], 
     "add" : [ 
      "vehicles", 
      "customers", 
      "reports" 
     ], 
     "edit" : [ 
      "users" 
     ] 
    } 
} 

Mon req.body ressemble à ceci

{ role_name: 'SA', 
    view: [ 'dashboard', 'users', 'settings' ], 
    add: 'users', 
    edit: 'users', 
    del: [ 'users', 'settings' ] } 
+0

Comment l'objet req.body ressemble? –

+0

Merci pour la réponse Mon req.body ressemble à ceci {role_name: 'SA', vue: [ 'tableau de bord', 'utilisateurs', 'Paramètres'], ajouter: 'utilisateurs, modifier : « utilisateurs ', del: [' utilisateurs ',' paramètres ']} – Vishnu

+0

J'ai mis à jour dans mon code – Vishnu

Répondre

1

Le problème ici est que le req.body ne pas utiliser un objet de liste quand il n'y a qu'un seul élément, par exemple:

view: [ 'dashboard', 'users', 'settings' ], 
add: 'users', instead of add: ['users'] 

Vous devez améliorer la création de la roleprivilege variable pour traiter ce cas avant de l'insérer dans mongoDB.

que vous voulez roleprivilege à ressembler à ceci lorsque vous imprimez:

{ 
    'role_name' :'SA', 
    'role':{ 
    'add': ['users'], 
    'del': [ 'users', 'settings' ], 
    'view':[ 'dashboard', 'users', 'settings' ], 
    'edit':['users'] 
    } 
} 
+0

Que vous j'ai résolu le problème – Vishnu