首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node:使用PUT更新数据库不适用于MongoDB

Node:使用PUT更新数据库不适用于MongoDB
EN

Stack Overflow用户
提问于 2021-03-11 07:13:46
回答 1查看 15关注 0票数 0

我的GET从DB返回一个包含2个简单对象的数组:

代码语言:javascript
运行
复制
[
    {
        "_id": "60491b5741893d23216d2de3",
        "text": "test`",
        "score": 19,
        "createdAt": "2021-03-10T19:17:43.809Z"
    },
    {
        "_id": "604947c7b3a7ed28c43c05b7",
        "text": "HELLO",
        "score": 22,
        "createdAt": "2021-03-10T22:27:19.739Z"
    }
]

在Postman中,我正在尝试做一个PUT到/604947c7b3a7ed28c43c05b7来更新这篇文章。在正文中,我发送:

代码语言:javascript
运行
复制
{
    "text": "Updated post test",
    "score": 100
}

我的节点路由看起来像这样:

代码语言:javascript
运行
复制
   router.put('/:id', async(req,res) => {
        const posts = await loadPostsCollection();
        const post = {};
        if (req.body.text) post.text = req.body.text;
        if (req.body.score) post.score = req.body.score;
    
        await posts.findOneAndUpdate(
            { _id: req.params.id },
            { $set: post },
            { new: true }
          );
        res.status(200).send();
    })

我收到了一条成功的消息,但是当我执行GET来查看数组时,该post的值并没有改变。

EN

Stack Overflow用户

发布于 2021-03-11 08:32:48

我假设您使用的是原生mongodb节点驱动程序。在mongoose中,除非传递回调函数,否则findOneAndUpdate()实际上不会执行查询。我当然不知道full是怎么回事,但听起来本地驱动的工作方式是一样的。所以你必须像这样重写你的代码:

代码语言:javascript
运行
复制
posts.findOneAndUpdate(
            { _id: req.params.id },
            { $set: post },
            { new: true },
            result => {console.log(result)}
          );

另一种方法是将.then()附加到末尾,因为according to the docs,如果没有传递回调,它将返回promise。所以我会这样做:

代码语言:javascript
运行
复制
await posts.findOneAndUpdate(
            { _id: req.params.id },
            { $set: post },
            { new: true }
          ).then(r => r);
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66574237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档