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

Truy vấn MongoDB để lấy nhiều giá trị từ mảng

Để xóa các giá trị khỏi mảng trong MongoDB, bạn sử dụng toán tử $pull kết hợp với tùy chọn multi: true để áp dụng cho nhiều tài liệu. Dưới đây là ví dụ minh họa chi tiết.

1. Tạo bộ sưu tập và chèn dữ liệu mẫu

Trước tiên, tạo collection demo392 và chèn 2 tài liệu có trường details là mảng các đối tượng chứa _id:

> db.demo392.insertOne({
    Name: 'Chris',
    details: [
        { _id: '101' },
        { _id: '102' }
    ]
});
{
    "acknowledged": true,
    "insertedId": ObjectId("5e5d2b3322064be7ab44e802")
}

> db.demo392.insertOne({
    Name: 'Chris',
    details: [
        { _id: '104' },
        { _id: '101' }
    ]
});
{
    "acknowledged": true,
    "insertedId": ObjectId("5e5d2b3422064be7ab44e803")
}

2. Xem dữ liệu ban đầu

Sử dụng find() để hiển thị tất cả tài liệu:

> db.demo392.find();

Kết quả:

{
    "_id": ObjectId("5e5d2b3322064be7ab44e802"),
    "Name": "Chris",
    "details": [ { "_id": "101" }, { "_id": "102" } ]
}
{
    "_id": ObjectId("5e5d2b3422064be7ab44e803"),
    "Name": "Chris",
    "details": [ { "_id": "104" }, { "_id": "101" } ]
}

3. Xóa phần tử có _id = '101' khỏi mảng details

Sử dụng update() với $pull và multi: true để xóa tất cả các phần tử khớp trong mọi tài liệu:

> db.demo392.update(
    {},
    { $pull: { details: { _id: '101' } } },
    { multi: true }
)
WriteResult({ "nMatched": 2, "nUpserted": 0, "nModified": 2 })

4. Kết quả sau khi xóa

Chạy lại find() để kiểm tra:

> db.demo392.find();

Kết quả:

{
    "_id": ObjectId("5e5d2b3322064be7ab44e802"),
    "Name": "Chris",
    "details": [ { "_id": "102" } ]
}
{
    "_id": ObjectId("5e5d2b3422064be7ab44e803"),
    "Name": "Chris",
    "details": [ { "_id": "104" } ]
}

Lưu ý: Từ MongoDB 3.2+, nên dùng updateMany() thay cho update() với multi: true vì đã được deprecated.