Mongodb 如何删除数组第三级中包含的元素?

Mongodb 如何删除数组第三级中包含的元素?,mongodb,Mongodb,我的数据库的结构如下: { "universe": "comics", "saga": [ { "name": "x-men", "characters": [ { "character": "wolverine",

我的数据库的结构如下:

  {
    "universe": "comics",
    "saga": [
      {
        "name": "x-men",
        "characters": [
          {
            "character": "wolverine",
            "powers": [
              {
                "power": "self-recovery"
              },
              {
                "power": "Super strength"
              },
              {
                "power": "steels claws"
              }
            ]
          },
          {
            "character": "cyclops",
            "powers": [
              {
                "power": "rays"
              },
              {
                "power": "Super strength"
              }
            ]
          }
        ]
      }
    ]
  },
  {
    "universe": "comics",
    "saga": [
      {
        "name": "spiderman",
        "characters": [
          {
            "character": "venom",
            "powers": [
              {
                "power": "Super strength"
              }
            ]
          }
        ]
      }
    ]
  }
我基本上想学习如何使用复杂阵列进行操作,这次我想如果我得到这个问题的答案,我会学到很多。 我想删除对象,其中
“power:“self recovery”

类似于
$.saga.characters.$.powers

我不知道怎么做,因为这个属性在主根下有很多层

通常我会用这样的东西:

db.mydb.update(
    {
    saga: {
        $elemMatch: { saga.characters.$ },
    },
    },

    { $pull: { powers: { power: "Super strength"
    } }},
    {
    new: true,
    multi:true
    },
在本例中,它应该删除
{“power”:“self recovery”}
中的尽可能多的对象(在本例中,仅删除一个对象,即角色为
狼獾的位置)

但我不知道该怎么做

db.test.update(
  {
    "saga.characters.powers": {
      "$elemMatch": {
        "power": "self-recovery"
      }
    }
  },
  {
    "$pull": {
      "saga.$[].characters.$.powers": { 
       "power":"self-recovery"
      }
    }
  }
)
它会删除相应的电源对象。它会导致

/* 1 */
{
    "_id" : ObjectId("5f11e25a9e001b53e39985fd"),
    "universe" : "comics",
    "saga" : [ 
        {
            "name" : "x-men",
            "characters" : [ 
                {
                    "character" : "wolverine",
                    "powers" : [ 
                        {
                            "power" : "Super strength"
                        }, 
                        {
                            "power" : "steels claws"
                        }
                    ]
                }, 
                {
                    "character" : "cyclops",
                    "powers" : [ 
                        {
                            "power" : "rays"
                        }, 
                        {
                            "power" : "Super strength"
                        }
                    ]
                }
            ]
        }
    ]
}
请检查并让我知道缺少的内容

尝试MongoDb 3.6中的位置all操作符+

var query = {
    universe: 'comics'
};

var update = {
    $pull: {
        'saga.$[].characters.$[].powers': {
            power: 'self-recovery'
        }
    }
};
var options = {
    multi: true
};
db.collection.update(query, update, options);

请尝试
updateMany
并查看此问题,只需按照操作放置对象键,“$[]”是什么意思?是否需要放置“[]”“$[]”对数组中与标准匹配的所有子文档应用拉动操作谢谢!如果我只使用
$
运算符而不使用
[]
行得通吗?你能帮我一下吗?这个问题很重要