使用Cypress查询MongoDB的ObjectId无结果或报错如何解决?
解决方案
错误原因说明
- 第一种写法的问题:你将
ObjectId(xxx)整体拼接为了字符串,MongoDB中_id字段存储的是ObjectId类型的值,字符串和该类型无法匹配,因此返回空结果。 - 第二种写法的问题:你没有从mongodb模块中引入
ObjectId构造函数,因此运行时报未定义错误。
具体操作步骤
- 在你编写MongoDB查询逻辑的文件头部导入
ObjectId构造函数:
如果是CommonJS规范:
const { ObjectId } = require('mongodb')
如果是ESModule规范:
import { ObjectId } from 'mongodb'
注意:由于你是通过cy.task执行数据库查询,MongoDB的操作逻辑是写在Cypress的Node层(即cypress.config.js的setupNodeEvents配置段,或是单独抽离的task逻辑文件),需要在该文件内导入ObjectId,不要在前端测试用例代码中导入。
- 调用构造函数转换id值后再查询,同时可添加合法性校验避免报错:
// 先校验传入的id是否为合法的ObjectId格式 if (!ObjectId.isValid(varName)) { throw new Error('传入的id不合法') } const result = await collection.find({_id: new ObjectId(varName)}).toArray()
内容的提问来源于stack exchange,提问作者Vicko
相关产品推荐
相关产品推荐

