如果我不提供两个值,则findOneAndUpdate()返回null

时间:2018-11-06 22:22:45

标签: javascript node.js mongodb mongoose

我很少向别人求助,但是在这种情况下,我不知道该怎么办。

我想处理对我的API的PUT请求,以更新MongoDB数据库中的“名称”或“ dllFile”或两个值,但是无论我做什么,它都会为未指定的值返回“ null”。

对我来说,最好在示例中显示问题,请看代码:

b

所以,我的问题是我想更新一个DLL文件,该文件位于我的服务器及其JSON属性(“ dllFile”)中,并且文件路径位于数据库中。如果需要,我也想更新“名称”属性。

我以multer作为中间件以多部分形式发送文件-它可以工作,但是我也将其路径存储在“ dllFile”属性中,上传文件时需要更改该属性。我在findOneAndUpdate()中有要设置的名称和dllFile属性。

问题是,当我设置两个值-可以正常工作时,属性会正确更改,但是例如当我仅发送文件时,其路径在dllFile中会更改,但名称会设置为“ null”。我知道为什么将它设置为null,但是如果我只想设置一个值,我不知道该怎么办。

我想出了一个for循环,该循环遍历数据库中的属性,但它仅适用于JSON中的名称,但不适用于多部分形式。

我从更新文件中得到的示例响应:

exports.dlls_update_one = (req, res, next) => {
    const id = req.params.dllId
    const name = req.body.name
    const dllFile = req.file.path


    DLL
    .findOneAndUpdate(id, { $set: { name, dllFile }})
    .exec()
    .then(result => {
        res.status(200).json({
            message: 'File successfully updated!',
            get_info: {
                type: 'GET',
                description: 'Get information about this DLL',
                url: `https://xxx.xxxx.xx/api/dlls/${result._id}`
            }
        });
    })
    .catch(err => {
        res.status(500).json({
            error: err
        });
    });
}

我感谢任何人的帮助。我希望你明白我的意思。如有任何疑问,请询问。我会尽一切努力来完成这项工作。

0 个答案:

没有答案