не может декодировать массив в ObjectID - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть эта структура, и когда я декодирую ее из базы данных, чтобы структурировать, я получаю эту ошибку cannot decode array into an ObjectID

type Student struct {
    ID           primitive.ObjectID   `bson:"_id,omitempty"`
    ...
    Hitches      []primitive.ObjectID `bson:"hitches"`
    ...
}

Я использую эту функцию для декодирования

func GetStudentByID(ID primitive.ObjectID) model.Student {

    // Filter
    filter := bson.M{"_id": ID}

    // Get the collection
    studentCollection := GetStudentCollection()

    // The object that it will return
    student := model.Student{}

    // Search the database
    err := studentCollection.FindOne(context.TODO(), filter).Decode(&student)

    if err != nil {
        fmt.Println("Student DAO ", err)  <----------- Error is output here
        return model.Student{}
    }

    return student
}

Вот скриншот с MongoDB

1 Ответ

4 голосов
/ 30 сентября 2019

hitches в вашей базе данных не является «простым» массивом, это массив массивов, поэтому вы можете декодировать его в значение типа [][]primitive.ObjectID:

type Student struct {
    ID      primitive.ObjectID     `bson:"_id,omitempty"`
    ...
    Hitches [][]primitive.ObjectID `bson:"hitches"`
    ...
}

Хотя каждый элементв hitches содержит один элемент, поэтому такая структура массива «2D» на самом деле не имеет смысла, это может быть ошибка в той части, где вы создаете эти документы. Если вы измените (исправите) это для создания «одномерного» массива в MongoDB, то вы можете декодировать его в значение типа []primitive.ObjectID.

...