导入bson的ObjectId后方法失效,报错equals不是函数求助
错误分析与解决方案
错误原因
你遇到的TypeError: answerID.equals is not a function(注:代码中实际为personID,应为笔误)核心问题有两个:
equals方法参数类型不匹配:bson的ObjectId.equals()方法仅支持传入另一个ObjectId实例作为参数,不能直接传入字符串。- 传入的
personID可能不是ObjectId实例:如果实例化Person时传入的是字符串或其他非ObjectId类型,该变量自然不存在equals方法。
修复方案
方案1:将字符串转为ObjectId后使用equals比较
若要保留equals方法的使用,需先把目标字符串转为ObjectId实例:
import { ObjectId } from 'bson'; export class Person{ personID: ObjectId; constructor(personID: ObjectId){ // 把字符串"12345"转为ObjectId后调用equals if(personID.equals(new ObjectId("12345"))){ this.personID = personID; } } }
方案2:转为字符串直接对比(更适配固定字符串场景)
如果只是和固定字符串"12345"做对比,直接将ObjectId转为字符串后用===判断更简洁:
import { ObjectId } from 'bson'; export class Person{ personID: ObjectId; constructor(personID: ObjectId){ if(personID.toString() === "12345"){ this.personID = personID; } } }
额外兼容:支持字符串类型参数
如果实例化Person时可能传入字符串(比如new Person("12345")),需要先将参数统一转为ObjectId,避免类型不匹配:
import { ObjectId } from 'bson'; export class Person{ personID: ObjectId; // 允许传入字符串或ObjectId类型 constructor(personID: string | ObjectId){ // 统一转换为ObjectId实例 const targetId = typeof personID === 'string' ? new ObjectId(personID) : personID; if(targetId.toString() === "12345"){ this.personID = targetId; } } }
内容的提问来源于stack exchange,提问作者Benedikt Müller
相关产品推荐
相关产品推荐

