【问题标题】:ObjectId is not a function in MongoDBObjectId 不是 MongoDB 中的函数
【发布时间】:2023-02-22 08:49:15
【问题描述】:

我刚刚看到一篇关于如何通过文档 ID 检索特定文档的博客,但这里的代码由于某种原因似乎不起作用。它总是有效,你们能告诉我为什么会这样吗?

代码:

app.post('/api/get-list-data', (req, res) => {
    const listID = req.body.listID;

    client.connect(async err => {
        const collection = client.db('to-do-lists').collection('made');
        const data = await collection.findOne({ _id: new ObjectId() })

        if(data) {
            res.send(data);
        }
        else {
            res.send({ success: false });
        }
    })
})

任何帮助将不胜感激!

【问题讨论】:

  • 即使它可行,您也永远找不到任何东西,因为您正在尝试为刚刚创建的 ObjectId 查找文档。

标签: node.js mongodb backend


【解决方案1】:

我通过在页面顶部获取 ObjectId 来解决我的问题,如下所示:

const { ObjectId } = require('mongodb');

【讨论】:

    【解决方案2】:

    ObjectIdmongo-cli 中是全局的,但在node 环境中不是。 您可以使用 mongodb 包中的导出函数 ObjectId 创建一个新的 ObjectId 实例。

            const data = await collection.findOne({ _id: mongo.ObjectId() })
    

    您还可以将 objectID 的有效十六进制表示形式作为参数传递(假设 listID 是一个)

            const data = await collection.findOne({ _id: mongo.ObjectId(listID) })
    

    在使用上面的语句之前,您还需要导入 mongodb 包才能工作。

    const mongo = require('mongodb')
    

    【讨论】:

    • 但是,它说“mongo”没有定义......
    • 更新答案以包含要求声明
    【解决方案3】:

    尝试遵循示例:

    import { ObjectId } from "bson"
    
    app.post('/api/get-list-data', (req, res) => {
      const listID = req.body.listID;
      client.connect(async err => {
        const collection = client.db('to-do-lists').collection('made');
        const data = await collection.findOne({
          '_id': new BSON.ObjectId('3r6a9f26x')
        }).toArray();
        if (data) {
          res.send(data);
        } else {
          res.send({
            success: false
          });
        }
      })
    })
    

    参考:

    【讨论】:

      【解决方案4】:

      我正在使用这个库 https://www.npmjs.com/package/bson-objectid

      #install
      npm install bson-objectid
      
      
      
      #EXAMPLES
      var ObjectID = require("bson-objectid");
      
      console.log(ObjectID());
      console.log(ObjectID("54495ad94c934721ede76d90"));
      console.log(ObjectID(1414093117));//time
      console.log(ObjectID([ 84, 73, 90, 217, 76, 147, 71, 33, 237, 231, 109, 144 ]));
      console.log(ObjectID(new Buffer([ 84, 73, 90, 217, 76, 147, 71, 33, 237, 231, 109, 144 ])));
      
      

      【讨论】:

        猜你喜欢
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 2014-11-21
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 2022-11-07
        • 2015-02-26
        相关资源
        最近更新 更多