Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách chèn phần tử vào vị trí cụ thể trong mảng MongoDB

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)
1Sau phần tử đầu tiên
-1Cuối mảng (tương đương $push bình thường)
NTrướ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 ý

  • $position chỉ 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...)