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

如何修改Mongoose默认_id属性,自定义使用Oracle Cloud账户ID

用自定义Oracle Cloud OCID作为Mongoose文档主键的实现方案

你的需求是用Oracle Cloud提供的OCID(格式为ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value)作为Account文档的主键,替代MongoDB默认生成的_id。之前将accountId设为ObjectId类型报错,是因为OCID不符合MongoDB ObjectId的格式要求(必须是12字节字符串、24位十六进制字符串或整数)。

正确的Schema配置方案

直接将accountId设为String类型,并指定它作为文档的主键,同时禁用默认的_id生成:

const { Schema } = require('mongoose');

const Account = new Schema({
    name: { type: String, required: true },
    accountId: { 
        type: String, 
        required: true,
        _id: true, // 将该字段设置为文档的主键
        unique: true // 确保OCID唯一性,避免重复存储
    },
    piracicaba: [{ type: Schema.Types.ObjectId, ref: 'Piracicaba' }]
}, { _id: false }); // 明确禁用默认的_id字段生成(可选,设置自定义主键后会自动禁用)

关键说明

  1. 主键指定:通过在accountId字段中添加_id: true,Mongoose会将该字段作为文档的主键,替代默认的_id。
  2. 类型匹配:OCID是自定义字符串,必须用String类型存储,不能用ObjectId类型,否则会触发格式校验错误。
  3. 唯一性保证:添加unique: true约束可以确保数据库中不会存入重复的OCID,避免数据冲突。

后续操作时,你可以直接用OCID作为主键进行查询、更新等操作,例如:

// 根据OCID查询账户
const account = await Account.findById('ocid1.test.oc1..xxxxxxEXAMPLE-compartmentId-Value');

内容的提问来源于stack exchange,提问作者Samuel A. Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:01:08