我无法删除从mongoose findone获得的json对象

hof1towb  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(192)

我正在尝试从mongoose findone函数的结果中删除一些json对象
但不工作
我的代码

export const transferGuest = async (req, res, next) => {
    
 var guest = await Booking.findOne({"roomNumber": req.body.roomNumber, booked: true}).sort({createdAt: -1})

    try{
        const newBooking = new Booking(guest)
        delete guest._id;
        return res.status(200).json(guest)

    }catch(error){
        next(error)
    }
}

但删除guest._id不起作用。
如何更正此问题?

cbwuti44

cbwuti441#

findOne()方法返回单个文档对象,因此不需要调用sort()。如果我很好地理解了您的问题,您希望从查询结果中删除_id属性。如果是这种情况,那么您应该尝试以下操作:

export const transferGuest = async (req, res, next) => {

    try{
        var guest = await Booking.findOne({roomNumber: req.body.roomNumber, booked: req.body.booked}).select('-_id')
        const newBooking = new Booking(guest)
        return res.status(200).json(guest)
        //return res.send(guest);

    }catch(error){
        next(error)
    }
}

请注意,您没有使用newBooking变量,如果您不打算使用它,则应将其删除。

wnavrhmk

wnavrhmk2#

你不能先对mongoose对象应用delete功能,你需要在普通对象中进行更改,然后才能对它应用delete功能。
要转换为普通对象,您可以在mongoose查询中使用**lean()**mongoose函数
参考Change mongoose object into plain object

const guest = await Booking.findOne({roomNumber: req.body.roomNumber, booked: req.body.booked}).lean();

试试这个:-

export const transferGuest = async (req, res, next) => {
    
 var guest = await Booking.findOne({"roomNumber": req.body.roomNumber, booked: true}).lean();

    try{
        const newBooking = new Booking(guest)
        delete guest._id;
        return res.status(200).json(guest)

    }catch(error){
        next(error)
    }
}

相关问题