猫鼬不能推送到深层嵌套的文件多位置操作符

时间:2016-08-23 05:38:55

标签: node.js mongoose

我想使用$ push将元素推送到子功能嵌套文档。但是,当我使用这样的模块。$。features。$。subFeatures''     它给了我多位置操作员错误。所以我得到的功能文档索引为x,但我无法弄清楚我可以将该值附加到查询的方式。 '模块$ features.x.subFeatures'没有工作。

var x =2;

RolePermission.update({
    'role': roleID,
     'modules.name' : data.module,
     'modules.features.name': data.feature

}, {

    $push:{
             'modules.$.features.x.subFeatures': {
                name: data.name,
                value: false,
                icon: data.icon
             }
          }

    }
}, {
    upsert: true
}, function (err, event) {

});

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式实现:

  1. 使用es6:
  2. 
    
    $push:{
                 [`modules.$.features.${x}.subFeatures`]: {
                    name: data.name,
                    value: false,
                    icon: data.icon
                 }
              }
    
    
    

    1. 没有es6:
    2. 
      
      var push = {$push: {}};
      push.$push['modules.$.features.' + x + '.subFeatures'] = {
                      name: data.name,
                      value: false,
                      icon: data.icon
                   };
      RolePermission.update({
          'role': roleID,
           'modules.name' : data.module,
           'modules.features.name': data.feature
      
      },
      push, 
      {
          upsert: true
      }, function (err, event) {
      
      });
      
      
      

      1. 找到文档,在代码中更新并保存。它可能会慢一点,但你不会遇到这样的问题。