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

Cập nhật phần tử mảng với positional operator $ trong MongoDB

Sử dụng positional operator $ để cập nhật phần tử khớp

Toán tử positional $ xác định phần tử đầu tiên trong mảng khớp với điều kiện truy vấn, cho phép cập nhật chính xác phần tử đó.

Dữ liệu sản phẩm

> db.demo22.insertOne({
    ProductId: 101,
    ProductDetails: [
        { ProductFirstPrice: '35', ProductSecondPrice: '75' },
        { ProductFirstPrice: '', ProductSecondPrice: '' },
        { ProductFirstPrice: '78', ProductSecondPrice: '24' }
    ]
});

Cập nhật ProductFirstPrice = '' cho phần tử có giá trị '35'

> db.demo22.update(
    { "ProductDetails.ProductFirstPrice": "35" },
    { $set: { "ProductDetails.$.ProductFirstPrice": "" } },
    false, true
);

Kết quả

{
    "_id": ObjectId("..."),
    "ProductId": 101,
    "ProductDetails": [
        { "ProductFirstPrice": "", "ProductSecondPrice": "75" },  <-- Đã cập nhật
        { "ProductFirstPrice": "", "ProductSecondPrice": "" },
        { "ProductFirstPrice": "78", "ProductSecondPrice": "24" }
    ]
}

Lưu ý: Chỉ phần tử đầu tiên khớp được cập nhật. Để cập nhật tất cả, dùng $[] (all positional operator) từ MongoDB 3.6+.