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

Node.js前端求助:如何将MongoDB的ObjectID转换为字符串以获取数据

解决MongoDB ObjectID转字符串的问题

后端处理(推荐)

如果用Mongoose操作MongoDB,在定义Schema时添加配置,自动将_id转换为字符串:

const productSchema = new mongoose.Schema({
  // 你的字段定义
}, {
  toJSON: {
    transform: function(doc, ret) {
      ret.id = ret._id.toString();
      delete ret._id;
      delete ret.__v;
    }
  }
});

这样接口返回的数据里,id就是字符串类型,前端无需额外处理。

前端处理(临时方案)

如果后端无法修改,在前端获取数据后手动转换_id为字符串:
修改你的useEffect代码:

useEffect(() => {
    const getProducts = async () => {
        setLoading(true);
        const response = await fetch(`http://localhost:8000/api/products/${id}`);
        const resData = await response.json();
        // 将ObjectID转换为字符串
        const formattedData = Array.isArray(resData) 
          ? resData.map(item => ({...item, id: item._id.toString()}))
          : {...resData, id: resData._id.toString()};
        setData(formattedData);
        setLoading(false);
    }
    getProducts();
}, [id]); // 加入id依赖,避免闭包过期问题

另外注意你的useState初始值是数组[],如果接口返回单个产品对象,建议把初始值改成null或{},避免类型混乱:

const [data, setData] = useState(null);

内容的提问来源于stack exchange,提问作者user15945543

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:31:04