【问题标题】:Returning null from findOne() when document exists当文档存在时从 findOne() 返回 null
【发布时间】:2020-09-07 22:25:57
【问题描述】:

在本地运行,但是在线访问一个图集MongoDb DB,我有builder的数据如下:

 [
   {
   "_id": "5ec63e97516541c07c2b26d3",
   "name": "Bob"
   },

  {
  "_id": "5ec64261b9be7b08cb8d7ba9",
  "name": "builder post test"
  }
]

真的很简单,但问题是当我定义我的 CRUD 操作时:我希望能够从上面的 id 中获取特定的构建器,比如 Bob。我的代码在我的 server.js 文件中如下:

server.get("/:id", (request, response) => {
      const itemId = request.params.id;

      dbCollection.findOne({id: itemId }, (error, result) => {
         if (error) throw error;
         response.json(result);
      });
   });

每当我测试端点时:http://localhost:4000/5ec63e97516541c07c2b26d3

我得到 null 返回。我已经登录控制台并确保 id 输入正确。我什至更改了 id --> _id 以匹配架构但仍然为空。

我把上面id的findOne初始参数改成name就可以访问端点http://localhost:4000/Bob了:

server.get("/:id", (request, response) => {
          const itemId = request.params.id;

          dbCollection.findOne({name: itemId }, (error, result) => {
             if (error) throw error;
             response.json(result);
          });
       });

我对为什么 name 有效但 id 无效感到困惑,我觉得我错过了一些基本的东西,感谢任何帮助或建议!

【问题讨论】:

  • 你在用猫鼬吗?
  • 不,我正在使用 mongodb

标签: javascript node.js mongodb nodemon mongodb-atlas


【解决方案1】:

如果您使用的是 mongodb 本机驱动,则需要先转换为 ObjectID。

const ObjectId = require('mongodb').ObjectID;

exports.findUserById = (req, res, next) => {
    db.get().collection('user').findOne({ _id: new ObjectId(req.params.id) }).then((result) => {
        if (result === null) {
            res.status(404).json({ errors: [{location: "users", msg: "Not found", param: req.params.id}]})
        }
        req.usuario = result;
        next()
    }).catch((err) => {
        res.status(500).json({ errors: [{location: "users", msg: err, param: req.params}]})
    })
}

【讨论】:

  • 谢谢!我理解它的方式,我把它看作一个字符串,所以认为它可以作为一个字符串传入。尝试投票,但不幸的是还没有足够的业力!
  • 为什么mongodb原生驱动需要是objectId才能访问而不是字符串?
  • 嗯,它不是一个字符串,它是一个 12 字节的十六进制数。所以你必须在使用前铸造它。更多信息在这里。 docs.mongodb.com/manual/reference/method/ObjectId
猜你喜欢
  • 2021-11-07
  • 2021-10-03
  • 2017-08-06
  • 2013-05-11
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
相关资源
最近更新 更多