【问题标题】:Put function in NodeJS to manipulate MongoDB is not working在 NodeJS 中放置函数来操作 MongoDB 不起作用
【发布时间】:2018-10-28 06:37:57
【问题描述】:

有人知道,如何在 NodeJS 中实现 put 函数来操作 MongoDB 集合吗?

我看到很多人使用app.getapp.post 来使用db.collection.updateOne(),但我不敢相信这是正确的做法。

不幸的是,当我使用app.put 时,我没有收到错误消息,但我的收藏中仍然没有任何变化。数据还是一样的。

请看我下面的代码:

  app.put('/user/:id', (req, res) => {
    const id = req.params.id;
    const details= {'_id' : new Object(id)};
    const user = {username: req.body.username, password: req.body.password};

    db.collection('users').findOneAndUpdate(details,{$set: user},{new: true}, function (err, item) {
        if (err) {
            res.send({'error':'An error has occured'});
        } else {
            res.send(user)
        }
    });
});

【问题讨论】:

  • 您在“对象”中使用“对象”。您的意思是 db.collection('users').updateOne(details,{$set: user}...,因为您已经在代码前面分配了 details 的“查询对象”。
  • 感谢您的提示。不幸的是,错误仍然存​​在。当我使用 Postman 并在此路径中使用“放置”,然后在请求正文中提供数据时,根本没有任何变化......
  • 这不是一个提示,而是一个明显的错误。当您发布时,req.params.id 的值是多少?究竟什么是“错误”?当然,现在会有所不同。
  • 问题是我根本没有得到......我得到了我在 else{} 中定义的响应,但是当我请求另一个 \get 我想要修改的用户仍然是一样...它是一个字符串,我猜...我正在做的请求是: localhost:8000/user/5afdb8d8836baa20f3c23e10
  • 因为你使用了错误的函数。你想要findOneAndUpdate()

标签: node.js mongodb rest


【解决方案1】:

错误是我将 ID 定义为 Object 而不是 ObjectID。 由于 MongoDB 是类型感知的,它没有发现 ID 是“放置”的。

所以而不是:

const details= {'_id' : new Object(id)};

必须是:

const details= {'_id' : new ObjectID(id)};

【讨论】:

    猜你喜欢
    • 2022-12-18
    • 1970-01-01
    • 2019-11-10
    • 2013-03-15
    • 2018-06-30
    • 2013-08-18
    • 2017-10-08
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多