I want to avoid the $unwind stages which are resource-intensive. I have tried using the updateMany statement with $arrayFilters.
But don’t succeed 
Here is a document example
{
_id: ObjectId('66ba22ed128efe0e16f91fab'),
markets: [
{
marketId: '1',
salePeriods: [
{
salePeriodId: 'a',
panel: {
storeSegmentations: [
{
segmentationType: 'A',
delete: false
},
{
segmentationType: 'B',
delete: false
}
]
}
},
{
salePeriodId: 'b',
panel: {
storeSegmentations: [
{
segmentationType: 'A',
delete: false
},
{
segmentationType: 'A',
delete: false
},
{
segmentationType: 'B',
delete: false
}
]
}
}
]
},
{
marketId: '2',
salePeriods: [
{
salePeriodId: 'a',
panel: {
storeSegmentations: [
{
segmentationType: 'A',
delete: false
},
{
segmentationType: 'B',
delete: false
},
{
segmentationType: 'B',
delete: false
}
]
}
}
]
}
]
}
db.test.updateMany(
{},
{
$set: {
"markets.$[].salePeriods.$[p].panel.storeSegmentations.$[s].delete": true
}
},
{
arrayFilters: [
{
"p.panel.storeSegmentations": {
$ne: [
{
$size: {
$filter: {
input: "$$p.panel.storeSegmentations",
as: "storeSegmentation",
cond: {
$eq: ["$$storeSegmentation.segmentationType", "$$s.segmentationType"]
}
}
}
},
1
]
}
},
{
"s.segmentationType": { $exists: true }
}
]
}
);