【问题标题】:findOneAndUpdate not updating the document and returning nullfindOneAndUpdate 不更新文档并返回 null
【发布时间】:2021-06-02 10:06:28
【问题描述】:

我是 mongodb 和 mongoose 的新手。

请帮帮我!我陷入了下面描述的这个问题。

这是我的代码。 addressSchema 和另一个用于保存用户 ID 和地址的架构

当我尝试更新文档时,我没有从下面的代码中得到任何响应。 但是当我尝试“find()”时,我得到了响应。

 const addressSchema = mongoose.Schema({
    name: {
        type: String,
        required: true,
        trim: true,
        min: 2,
        max: 40
    },
    mobileNo: {
        type: String,
        required: true,
        trim: true 
    },
    pincode: {
        type: String,
        required: true,
        trim: true
    },
    landmark: {
        type: String,
        required: true,
        trim: true
    },
    address: {
        type: String,
        required: true,
        trim: true
    },
    area: {
        type: String,
        required: true,
        trim: true
    },
    state: {
        type: String,
        required: true,
        trim: true
    },
    alternatePhoneNo: {
        type: String
    },
    addressType: {
        type: String,
        required: true,
        enum: [ 'home', 'work' ]
    }
})
        Schema for storing the address array and user ID  

const userAddressSchema = mongoose.Schema({
    user: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'User'
    },
    address: [addressSchema]
}, { timestamps: true })
    I tried updating many ways but still cant update

//更新文档的代码


const editAddress = (req, res) => {
    const { address } = req.body

    if(address) {
        UserAddress.findOne({ user: req.user._id })
        .exec((error, _userAddress) => {
            if(error) return res.status(400).json({ error })

            if(_userAddress) {
                UserAddress.findOneAndUpdate({ "_id": _userAddress._id,"address._id": address._id }, {
                    "$set": {
                        "address.$": {
                            "name": address.name,
                            "mobileNo": address.mobileNo,
                            "pincode": address.pincode,
                            "landmark": address.landmark,
                            "address": address.address,
                            "area": address.area,
                            "state": address.state,
                            "alternatePhoneNo": address.alternatePhoneNo,
                            "addressType": address.addressType
                        }
                    }
                })
                .exec((error, data) => {
                    if(error) return res.status(400).json({ error })
                    if(data) return res.status(201).json({ data })
                    console.log(error)
                    console.log(data)
                })
            }  
        })  
    }
} 


请大家帮忙 提前致谢

【问题讨论】:

  • 你从哪里得到这个属性**_userAddress._id **?
  • @MontyTomar 更改了我的代码,请检查
  • 尝试添加 new: true and returnOriginal: false and also upsert
  • UserAddress.findOneAndUpdate({ "_id": _userAddress._id,"address._id": address.id },试试去掉** address._id **属性值前的下划线。
  • 我试过了还是没有反应

标签: javascript node.js mongodb express mongoose


【解决方案1】:

试试awaiting.findOneAndUpdate()函数:

const editAddress = async (req, res) => {
    const { address } = req.body

    if(address) {
        await UserAddress.findOne({ user: req.user._id })
        .exec((error, _userAddress) => {
            if(error) return res.status(400).json({ error })

            if(_userAddress) {
                await UserAddress.findOneAndUpdate({ "_id": _userAddress._id,"address._id": address._id }, {
                    "$set": {
                        "address.$": {
                            "name": address.name,
                            "mobileNo": address.mobileNo,
                            "pincode": address.pincode,
                            "landmark": address.landmark,
                            "address": address.address,
                            "area": address.area,
                            "state": address.state,
                            "alternatePhoneNo": address.alternatePhoneNo,
                            "addressType": address.addressType
                        }
                    }
                })
                .exec((error, data) => {
                    if(error) return res.status(400).json({ error })
                    if(data) return res.status(201).json({ data })
                    console.log(error)
                    console.log(data)
                })
            }  
        })  
    }
} 

Awaiting 这也解决了我的错误。

【讨论】:

  • 我试着等待仍然没有得到任何回应
  • 尝试在您的.findOneAndUpdate() 函数中删除_idadress._idbrackets
  • 我确实尝试删除它。它向我显示代码中的错误
  • 如果我删除括号,我的代码会出错
  • 或尝试将.findOneAndUpdate() 中的第一个对象更改为{ _id: _userAddress._id, address: { _id: address._id }
猜你喜欢
  • 1970-01-01
  • 2021-01-23
  • 2018-07-10
  • 2019-02-07
  • 2021-01-29
  • 1970-01-01
  • 2020-08-10
  • 2017-01-27
  • 2019-10-14
相关资源
最近更新 更多