从猫鼬数组中删除特定对象并更新它

时间:2020-06-28 13:13:57

标签: node.js mongodb mongoose mongodb-query

嗨,我是猫鼬和mongodb的新手。我想从文档中的数组中删除特定对象,然后返回更新后的文档。我已经尝试了很多,但总是返回null。这是我的文档结构。

{
    "role": "Student",
    "skills": [
        "html",
        "css",
        "js"
    ],
    "_id": "5ef583198e9b23cc8c606c10",
    "user": "5ee5c9ef26333935647e54bc",
    "__v": 24,
    "status": "Intern",
    "education": [],
    "internships": [
        {
            "current": false,
            "_id": "5ef894d48f601512340f25b5",
            "title": "Web",
            "company": "asdfadfd",
            "from": "2010-02-04T00:00:00.000Z"
        },
        {
            "current": false,
            "_id": "5ef894f31dc9413bf89c44d8",
            "title": "Django",
            "company": "example",
            "from": "2010-02-04T00:00:00.000Z"
        }
    ]
}

这是我的更新功能

exports.deleteStudentInternship = async (req, res, next) => {
    const deleteInternship = await Student.findOneAndUpdate(
        { $and: [{ user: req.user.id }, { 'internships': { $elemMatch: { _id: req.params.intern_id } } }] },
        { '$pull': { 'internships': { _id: req.params.intern_id } } },
        {
            new: true,
            useFindAndModify: false,
        },
        function (error) {
            if (error) return validationError(404, { internship: 'Internship id not exist' }, next)
        }
    );

    if (!deleteInternship) {
        return validationError(404, { internship: 'Internship id not exist' }, next)
    }
    res.status(200).json(deleteInternship);
}

1 个答案:

答案 0 :(得分:0)

请更改我的意思是拉动部分

{ '$pull': { 'internships': { _id: req.params.intern_id } } }

对此进行尝试:

{ '$pull': { 'internships': req.params.intern_id } }