Giới thiệu
Để chèn phần tử vào một vị trí index cụ thể trong mảng, MongoDB sử dụng toán tử $push kết hợp với $position và $each.
Cú pháp
db.collection.update(
{ _id: ObjectId("...") },
{
$push: {
tenTruongMang: {
$each: [ giaTriMoi ],
$position: index
}
}
}
);
Ví dụ minh họa: Chèn vào đầu mảng (index 0)
1. Tạo dữ liệu
> db.chenViTriDemo.insertOne({"TenSinhVien":"Larry","MonHoc":["MySQL","Java"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d2562a629b87623db1b2c") }
> db.chenViTriDemo.insertOne({"TenSinhVien":"Chris","MonHoc":["C++","C"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9d2573a629b87623db1b2d") }
2. Chèn "MongoDB" vào đầu mảng của Chris (index 0)
> db.chenViTriDemo.update(
{ _id: ObjectId("5c9d2573a629b87623db1b2d") },
{
$push: {
MonHoc: {
$each: [ { "MonHocChinh": "MongoDB" } ],
$position: 0
}
}
}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
3. Kết quả
{ "_id" : ObjectId("5c9d2573a629b87623db1b2d"), "TenSinhVien" : "Chris", "MonHoc" : [
{ "MonHocChinh" : "MongoDB" },
"C++",
"C"
] }
Các vị trí $position thường dùng
| Giá trị | Vị trí chèn |
|---|---|
0 | Đầu mảng (trước phần tử index 0) |
1 | Sau phần tử đầu tiên |
-1 | Cuối mảng (tương đương $push bình thường) |
N | Trước phần tử index N |
Chèn nhiều phần tử cùng lúc
db.collection.update(
{ _id: id },
{
$push: {
tags: {
$each: [ "tag1", "tag2", "tag3" ],
$position: 2
}
}
}
);
Lưu ý
$positionchỉ hoạt động khi kết hợp với$each- Nếu index > độ dài mảng, phần tử sẽ được thêm vào cuối
- Index âm tính từ cuối mảng (-1 là cuối, -2 là gần cuối...)