变量说明: ValidObjectId: ValidObjectId.Valid() == true InvalidObjectId: InvalidObjectId.Valid() == false

场景jsonbson
bson.ObjectId + ValidObjectId正常序列化正常存储
bson.ObjectId + InvalidObjectId序列化为空字符串不允许存储
bson.ObjectId + omitempty + ValidObjectId正常序列化正常存储
bson.ObjectId + omitempty + InvalidObjectId序列化后无此字段不存储此字段
*bson.ObjectId + ValidObjectId正常序列化正常存储
*bson.ObjectId + nil序列化为null存储为null
*bson.ObjectId + InvalidObjectId序列化为空字符串不允许存储
*bson.ObjectId + omitempty + ValidObjectId正常序列化正常存储
*bson.ObjectId + omitempty + nil序列化后无此字段不存储此字段
*bson.ObjectId + omitempty + InvalidObjectId序列化为空字符串不允许存储

使用建议

bson.ObjectId + omitempty 兼容性最佳, 搭配 id.Valid() 方法检测有效性足以满足绝大多数场景;

如果需要 json&bson 序列化为 null, 则需要 *bson.ObjectId, 使用时需 id != nil && id.Valid() 进行检测有效性.