在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
相关产品推荐
相关产品推荐

