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

在Node.js中使用MongoDB时如何自定义_id字段?

在Node.js中给MongoDB的_id字段设置自定义值的正确方法

当然可以给MongoDB的_id字段指定自定义值(字符串、数字都可以),你当前的失败原因是错误地用new ObjectId()包裹了不合法的字符串——MongoDB的ObjectId类型要求必须是符合规范的12字节数据(对应24位十六进制字符串),随便传入普通字符串会直接报错。

正确的两种实现方式:

1. 直接用自定义字符串/数字作为_id(无需ObjectId包装)

如果不需要_id是ObjectId类型,直接把自定义值赋值给_id即可,MongoDB会直接存储这个值:

const db = client.db("db1");
const collection1 = db.collection("collection1");
await collection1.insertOne({
  _id: "my-custom-string-id", // 直接用自定义字符串
  // _id: 1001,  // 也可以用数字类型的自定义ID
  name: req.body.name,
  age: req.body.age,
});
res.status(200).send("Data Inserted");
client.close();

2. 若要使用ObjectId类型的自定义值,必须传入合法的ObjectId字符串

如果你坚持要_id是ObjectId类型,那传入的字符串必须是24位十六进制的合法格式,比如:

const { ObjectId } = require('mongodb'); // 确保已引入ObjectId

const db = client.db("db1");
const collection1 = db.collection("collection1");
await collection1.insertOne({
  _id: new ObjectId("60d21b4667d0d8992e610c85"), // 合法的24位十六进制字符串
  name: req.body.name,
  age: req.body.age,
});
res.status(200).send("Data Inserted");
client.close();

额外注意事项:

  • 自定义的_id必须保证在集合中是唯一的,否则插入时会抛出重复键错误。
  • 如果你不指定_id,MongoDB会自动为你生成一个唯一的ObjectId。

内容的提问来源于stack exchange,提问作者Luhaib-j

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:01:01