【问题标题】:MongoDB findOne funtion returns null when comparing with idMongoDB findOne 函数与 id 比较时返回 null
【发布时间】:2020-09-21 08:11:04
【问题描述】:

当我将用户的 id 作为参数传递时,我正在使用以下代码获取用户的详细信息:

   server.get("/users/:id", (req, res) => {
        const itemId = req.params.id;

        dbCollection.findOne({ _id: itemId }, (error, result) => {
            if (error) throw error;
            // return item
            res.json(result);
        });
    });

但是,这似乎不起作用,因为每当我运行代码时,都会返回一个空值。 我的问题与之前提出的许多问题不同,因为我的 ID 为 ObjectId('randomId'),而不是字符串。如何修复我的代码?

【问题讨论】:

  • 你可以试试_id: mongoose.Types.ObjectId(itemId) 吗?
  • 嘿@mickl,它现在可以工作了,你能回答这个问题以便我接受吗?

标签: javascript node.js mongodb express mongodb-query


【解决方案1】:

req.params.id 是一个字符串,而你的 _id 是一个 ObjectId,所以这不起作用,因为 MongoDB 首先需要类型相等,你需要转换值:

const itemId = mongoose.Types.ObjectId(req.params.id);

【讨论】:

    【解决方案2】:

    MongoDB 不会将“itemId”视为 MongoDB id,因此您需要将其转换为如下所示:

    new mongodb.ObjectId(itemId)
    

    这意味着:

    const mongodb = require('mongodb')
    

    【讨论】:

      【解决方案3】:

      正如其他人已经说过的,MongoDB 期望 _id 是一个 ObjectID。但是,如果您正在搜索 ONE 项目,而不是使用 findOne 使用 findById,它接受 id 作为字符串。

      const { Model } = require('./models'); // Model is your Mongoose Schema
      
      server.get("/users/:id", async (req, res) => {
         const { id } = req.params;
      
         // This is the same as Model.findOne({ _id: new ObjectId(id) });
         const item = await Model.findById(id);
      
         return res.json(item);
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-22
        • 2015-07-02
        • 1970-01-01
        • 2014-10-28
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多