Как корректно занести объект с полем ObjectID в MongoDB (Golang mongo-driver)?

Для того чтобы корректно занести объект с полем ObjectID в MongoDB, используя Golang mongo-driver, необходимо выполнить следующие шаги:

1. Установите пакет mongo-driver для работы с MongoDB в вашем проекте. Для этого выполните команду: go get go.mongodb.org/mongo-driver

2. Подключитесь к вашей MongoDB базе данных с помощью метода mongo.Connect() или mongo.NewClient(). Полученный клиент используйте для создания контекста запроса.

client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
    log.Fatal(err)
}

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

err = client.Connect(ctx)
if err != nil {
    log.Fatal(err)
}

3. Ваша структура объекта должна содержать поле с типом primitive.ObjectID. Импортируйте этот тип из пакета go.mongodb.org/mongo-driver/bson/primitive.

import "go.mongodb.org/mongo-driver/bson/primitive"

type Person struct {
    ID    primitive.ObjectID `bson:"_id,omitempty"`
    Name  string             `bson:"name"`
    Email string             `bson:"email"`
}

4. Для добавления объекта в коллекцию MongoDB используйте метод Collection.InsertOne() и передайте контекст, коллекцию и ваш объект. Метод вернет результат операции, включая созданный ObjectID.

collection := client.Database("mydb").Collection("people")

person := Person{
    Name:  "John Doe",
    Email: "[email protected]",
}

result, err := collection.InsertOne(ctx, person)
if err != nil {
    log.Fatal(err)
}

insertedID := result.InsertedID.(primitive.ObjectID)
fmt.Println("Inserted person with ID:", insertedID.Hex())

Обратите внимание, что поле ID в структуре с типом primitive.ObjectID помечено тегом bson:"_id,omitempty". Это гарантирует, что при вставке нового документа MongoDB автоматически сгенерирует новый ObjectID, если поле ID не задано.

Таким образом, вы можете корректно занести объект с полем ObjectID в MongoDB, используя Golang mongo-driver.