Thêm giá trị vào mảng nếu chưa tồn tại ($addToSet)
Toán tử $addToSet thêm giá trị vào mảng chỉ khi giá trị đó chưa có trong mảng, tránh trùng lặp.
Dữ liệu điểm số
> db.demo336.insertOne({"Name": "Chris", "Score": [45, 67, 78]});
> db.demo336.insertOne({"Name": "David", "Score": [89, 93, 47]});
Thêm mảng [56, 34, 71] vào Score của David
> db.demo336.update(
{ Name: "David" },
{ $addToSet: { Score: [56, 34, 71] } }
);
Kết quả
{
"_id": ObjectId("..."),
"Name": "David",
"Score": [89, 93, 47, [56, 34, 71]] // Mảng được thêm như MỘT phần tử
}
⚠️ Cạm bẫy thường gặp: $addToSet coi cả mảng [56,34,71] là một giá trị đơn. Để thêm từng phần tử, dùng $each:
> db.demo336.update(
{ Name: "David" },
{ $addToSet: { Score: { $each: [56, 34, 71] } } }
);
Kết quả: Score: [89, 93, 47, 56, 34, 71] (các phần tử riêng lẻ).