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

MongoDB $pull với positional operator

Kết hợp $pull với positional operator $ để xóa phần tử trong mảng lồng nhau.

Tạo collection

> db.pullWithPositionalOperatorDemo.insertOne({
    _id: 100,
    "StudentDetails": [
        { "StudentId": "STU-1", "StudentFavouriteSubject": ["MongoDB", "Java"] },
        { "StudentId": "STU-2", "StudentFavouriteSubject": ["PHP", "MySQL"] }
    ]
});
{ "acknowledged": true, "insertedId": 100 }

Hiển thị tài liệu

> db.pullWithPositionalOperatorDemo.find().pretty();

Xóa "MySQL" khỏi StudentFavouriteSubject của sinh viên STU-2

> db.pullWithPositionalOperatorDemo.update({
    "StudentDetails": {
        $elemMatch: {
            "StudentId": "STU-2",
            "StudentFavouriteSubject": "MySQL"
        }
    }
}, {
    $pull: { "StudentDetails.$.StudentFavouriteSubject": "MySQL" }
}, {
    multi: true
});
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

Kết quả

> db.pullWithPositionalOperatorDemo.find().pretty();

Kết quả (mảng STU-2 chỉ còn PHP):

{
    "_id": 100,
    "StudentDetails": [
        { "StudentId": "STU-1", "StudentFavouriteSubject": ["MongoDB", "Java"] },
        { "StudentId": "STU-2", "StudentFavouriteSubject": ["PHP"] }
    ]
}

Giải thích:

  • $elemMatch trong query khớp phần tử mảng STU-2 có chứa "MySQL"
  • StudentDetails.$ trong $pull tham chiếu đến phần tử đó
  • $pull xóa "MySQL" khỏi mảng StudentFavouriteSubject của phần tử đó