Database

db={products:[{_id:1001,"name":"Pen","shops":[{"name":"Target","brands":["BIC"]},{"name":"Walmart","brands":["Parker"]}],"brands":[{"name":"BIC"},{"name":"Parker"}]},{_id:2002,"name":"Pen","shops":[{"name":"Target","brands":["BIC","Staedtler"]},{"name":"Walmart","brands":["Parker"]}],"brands":[{"name":"Staedtler"},{"name":"BIC"},{"name":"Parker"}]}]}

Query

db.products.update({},[{$set:{/** create new brandIDs based on index*/"brands":{$map:{input:"$brands",as:"brand",in:{"name":"$$brand.name","id":{$add:[{$indexOfArray:["$brands","$$brand"]},1]}}}},/** also create shop-brandIDs based on their index*/"shops":{$map:{input:"$shops",as:"shop",in:{"name":"$$shop.name","brands":{$map:{input:"$$shop.brands",as:"shop_brand",in:{$add:[{$indexOfArray:["$brands",{"name":"$$shop_brand"}]},1]}}}}}}}}],{multi:true})

Result