Đó là vì bạn đang sử dụng toán tử $:Toán tử $ vị trí xác định một phần tử (không phải đa) trong một mảng để cập nhật mà không chỉ định rõ ràng vị trí của phần tử trong mảng. Để chiếu hoặc trả về một phần tử mảng từ thao tác đọc, hãy xem toán tử $ chiếu.
Bạn có thể sử dụng mã dưới đây để làm điều đó:
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);
});