You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入bson的ObjectId后方法失效,报错equals不是函数求助

错误分析与解决方案

错误原因

你遇到的TypeError: answerID.equals is not a function(注:代码中实际为personID,应为笔误)核心问题有两个:

  1. equals方法参数类型不匹配:bson的ObjectId.equals()方法仅支持传入另一个ObjectId实例作为参数,不能直接传入字符串。
  2. 传入的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:02:27