Причината е, че използвате оператор $:Позиционният оператор $ идентифицира елемент (не мулти) в масив за актуализиране без изрично указване на позицията на елемента в масива. За да проектирате или върнете елемент от масив от операция за четене, вижте оператора $ projection.
Можете да използвате кода по-долу, за да го направите:
db.playground.find({
$and: [
{
"TargetSegments.Colors": {
$exists: true
}
},
{
"ProjectFileId": 1
},
{
"SourceLanguageId": 2
},
{
"TargetSegments": {
$elemMatch: {
"LanguageId": 1
}
}
}
]
}).forEach(function(item)
{
var targets = item.TargetSegments;
for(var index = 0; index < targets.length; index++)
{
var target = targets[index];
target.Segment = null,
target.Colors= [],
target.Widths= [],
target.Heights= []
}
db.playground.save(item);
});