MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để xóa một đối tượng lồng nhau dựa trên ObjectId của nó?

Bạn có thể sử dụng lộ trình DELETE sau để xóa một học viên khỏi một phiên khóa học.

router.delete(
  "/course/:courseId/session/:sessionId/student/:studentId",
  async (req, res) => {
    try {
      let result = await Course.updateOne(
        { _id: req.params.courseId, "sessions._id": req.params.sessionId },
        {
          $pull: { "sessions.$.students": { userName: req.params.studentId } }
        }
      );

      res.send(result);
    } catch (err) {
      console.log(err);
      res.status(500).send("Something went wrong");
    }
  }
);

Giả sử bạn có một khóa học như thế này:

{
    "_id" : ObjectId("5de907acdfcef9493cd215a8"),
    "name" : "Course 1",
    "sessions" : [
        {
            "date" : ISODate("2019-12-05T16:32:41.998+03:00"),
            "_id" : ObjectId("5de907acdfcef9493cd215a9"),
            "students" : [
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ac"),
                    "userName" : ObjectId("5de8e4c8f74cf254d04f90d8"),
                    "status" : 1
                },
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ab"),
                    "userName" : ObjectId("5de8e4d5f74cf254d04f90d9"),
                    "status" : 1
                },
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215aa"),
                    "userName" : ObjectId("5de8e4ddf74cf254d04f90da"),
                    "status" : 1
                }
            ]
        }
    ],
    "__v" : 0
}

Nếu chúng tôi muốn xóa học sinh bằng userName có giá trị 5de8e4ddf74cf254d04f90da , chúng tôi có thể gửi yêu cầu XÓA đến tuyến đường của mình bằng cách sử dụng url như sau:

http://localhost/courses/5de907acdfcef9493cd215a8/session/5de907acdfcef9493cd215a9/student/5de8e4ddf74cf254d04f90da

5de907acdfcef9493cd215a8 -> courseId

5de907acdfcef9493cd215a9 -> sessionId

Phản hồi sẽ như thế này:

{
    "n": 1,
    "nModified": 1,
    "ok": 1
}

Khi chúng tôi xem khóa học của mình, chúng tôi thấy học viên đã bị loại bỏ:

{
    "_id" : ObjectId("5de907acdfcef9493cd215a8"),
    "name" : "Course 1",
    "sessions" : [
        {
            "date" : ISODate("2019-12-05T16:32:41.998+03:00"),
            "_id" : ObjectId("5de907acdfcef9493cd215a9"),
            "students" : [
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ac"),
                    "userName" : ObjectId("5de8e4c8f74cf254d04f90d8"),
                    "status" : 1
                },
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ab"),
                    "userName" : ObjectId("5de8e4d5f74cf254d04f90d9"),
                    "status" : 1
                }
            ]
        }
    ],
    "__v" : 0
}

Khi chúng ta thấy sinh viên có tên người dùng có giá trị 5de8e4ddf74cf254d04f90da không còn tồn tại trong phiên khóa học, nghĩa là nó đã bị xóa.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb nâng cấp ngoại lệ trường BSON không hợp lệ

  2. Không thể duy trì trạng thái giao dịch vì thiếu tập hợp giao dịch phiên

  3. Tính toán giá trị bỏ qua cho bản ghi đã cho để phân trang được sắp xếp

  4. MongoDB. Đặt số duy nhất cho mỗi tài liệu trong bộ sưu tập

  5. MongoDB đối lập với $ addToSet