【问题标题】:findOneAndUpdate is not working in mongodb/nodejsfindOneAndUpdate 在 mongodb/nodejs 中不起作用
【发布时间】:2019-10-26 20:26:34
【问题描述】:

我正在尝试使用 nodejs 更新 mongodb 中的记录,但它不起作用 我在另一边获取数据,一切似乎都正常,但它不会更新记录

我的服务器端代码是

 console.log('here',req.params.userId )
  User.findOneAndUpdate({ _id: req.params.userId }, {$set:req.body}, { new: true }, function (err, users) {
    if (err)
        res.send(req.params.userId);
res.json(users);
});

它返回一个空值,我不知道为什么。 任何帮助将不胜感激。

【问题讨论】:

  • req.body 包含什么。它是否包含要更新的字段及其值
  • 是的@ambianBeing
  • 调试它..当你做一个简单的查找User.findOne({ _id : req.params.userId })时你会得到任何记录吗?即使需要强制转换,也可以使用猫鼬自己的方法mongoose.Types.ObjectId('req.params.userId');

标签: node.js angular mongodb ionic3


【解决方案1】:

这是因为 Mongo 的 ObjectId() 在 req.body 中呈现为字符串:

这样做:


console.log('here',req.params.userId )

User.findOneAndUpdate({ _id: new ObjectId(req.params.userId) }, {$set:req.body}, { new: true }, function (err, users) {
    if (err) res.send(req.params.userId);

    res.json(users);
});

您可以要求 bson 包中的 ObjectId 当我使用 TypeScript 时,我使用的导入是 import { ObjectId } from 'bson'; 在纯 JavaScript 中应该是 import ObjectId = require('bson');

【讨论】:

  • 已尝试 objectId,但现在我收到此错误:“CastError: Cast to ObjectId failed for value "BSON {}" at path "_id" for model "User"\n。
  • req.params.userId 的内容是什么?它应该是一个字符串。还要确保你不是在投射而是创建一个新的 ObjectId
  • req,params.userId 是一个字符串,我正在这样做 var ObjectId = require('mongodb').ObjectID; User.findOneAndUpdate({ _id: new ObjectId(req.params.userId) }, {$set:req.body}, { new: true }, function (err, users) { if (err) res.send(req. params.userId); res.json(users); });
  • 但它仍然给我空值@OTANO
  • import ir from bson npmjs.com/package/bson,还要确保你的数据没问题,你能在命令行 mongoDB 上做一个测试吗?它有效吗?正确的导入将是 const bson = require("bson") 然后您在第一个参数中执行 { _id: new bson.ObjectId(stringID) } ,继续检查您可以使用简单的 find 而不是 findOneAndUpdate 。告诉我
【解决方案2】:

你可以这样做:

User.findOneAndUpdate(
  { _id: new ObjectId(req.params.userId) },
  ...req.body,
  { new: true }
)

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 1970-01-01
    • 2019-11-10
    • 2022-12-18
    • 2017-09-04
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多