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

在MongoDB中使用shortid作为自定义Object ID遇到的问题

解决MongoDB中自定义shortid作为_id被自动替换的问题

这个需求完全可行,MongoDB本身支持用任意类型(只要集合内唯一)作为_id字段值,你的问题出在Go结构体的字段定义上:

  • Go语言中,小写开头的字段是私有字段,MongoDB的Go驱动无法识别并序列化这个字段,所以插入文档时会直接忽略你设置的_id值,自动生成默认的ObjectId。

修正方案

把结构体里的_id改成大写开头的字段,同时通过bson标签映射到MongoDB的_id字段:

type Book struct {
    ID        string `bson:"_id"`
    Title     string
    Author    string
    ISBN      string
    Publisher string
    Copies    int
}

// ...

id := shortid.MustGenerate()
book1 := Book{
    ID:        id,
    Title:     "Animal Farm",
    Author:    "George Orwell",
    ISBN:      "0451526341",
    Publisher: "Signet Classics",
    Copies:    100,
}
insertResult, err := booksCollection.InsertOne(context.TODO(), book1)

额外注意事项

  • 要保证你生成的shortid在目标集合内是唯一的,否则插入时会触发重复键错误(MongoDB对_id字段默认强制唯一约束)
  • 如果后续需要查询这个文档,直接用你设置的shortid值匹配_id字段即可,和默认ObjectId的查询逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:57:39