MongoDB报错‘insertOne is not a function’的原因及解决方法
问题原因与解决方法
错误根源
dbConnect是异步函数,直接执行const users = dbConnect()时,users拿到的是Promise对象,而非MongoDB的Collection实例,所以调用insertOne会提示不是函数。
修正后的代码
const dbConnect = async () => { try { await client.connect(); const db = client.db('smile-tracker'); const users = db.collection('users'); return users; } catch (e) { console.log('Database connect error!'); console.log(e); // 连接失败时返回null,避免后续调用出错 return null; } } // 必须用await等待异步函数执行完成,拿到真正的Collection实例 const users = await dbConnect(); // 先判断users是否有效,再执行插入操作 if (users) { await users.insertOne({user: username}); }
额外注意事项
- 这段代码必须放在async函数内部执行,顶级await需要特定环境支持(比如Node.js 14.8+或ES模块),如果是普通脚本,要把调用逻辑包裹在async函数里。
- 之前能正常运行大概率是因为环境或代码结构变化,比如之前的调用是在async上下文里用了await,后来改动时漏掉了。
内容的提问来源于stack exchange,提问作者Глеб Савостьянов
相关产品推荐
相关产品推荐

