Не удалось декодировать поля верблюдов с помощью mongo-go-driver - PullRequest
0 голосов
/ 25 февраля 2019

Я использую такую ​​структуру

type User struct {
    Username  string    `json: "username" bson: "username"`
    FirstName string    `json: "firstName" bson: "firstName"`
    LastName  string    `json: "lastName" bson: "lastName"`
    Email     string    `json: "email" bson: "email"`
    Gender    string    `json: "gender" bson: "gender"`
    Password  string    `json: "password" bson: "password"`
    Enabled   bool      `json: "enabled" bson: "enabled"`
    BirthDate time.Time `json: "birthDate" bson: "birthDate"`
    CreatedAt time.Time `json: "createdAt" bson: "createdAt"`
    UpdatedAt time.Time `json: "updatedAt" bson: "updatedAt"`
    collection *mongo.Collection
}

Затем запрашиваем данные, используя

func (u *User) FindByUsername(userName string) error {
    var ctx, _ = context.WithTimeout(context.Background(), 10*time.Second)
    filter := bson.M{"username": userName}
    err := u.collection.FindOne(ctx, filter).Decode(&u)
    return err
}

В результате я получаю

{"Username":"jbond","FirstName":"","LastName":"","Email":"email@gmail.com","Gender":"Male","Password":"","Enabled":true,"BirthDate":"0001-01-01T00:00:00Z","CreatedAt":"0001-01-01T00:00:00Z","UpdatedAt":"0001-01-01T00:00:00Z"}

Большая часть данных заполняется, за исключением полей верблюжьих регистров, и когда я запрашиваю с консоли данные там

> db.users.find().pretty()
{
    "_id" : ObjectId("xxxxxxxxxxxxxxxxxxxxxxxx"),
    "username" : "jbond",
    "firstName" : "James",
    "lastName" : "Bond",
    "email" : "email@gmail.com",
    "password" : "",
    "enabled" : true,
    "gender" : "Male",
    "birthDate" : {
        "type" : {
            "code" : "function Date() {\n    [native code]\n}"
        }
    },
    "createdAt" : {
        "type" : {
            "code" : "function Date() {\n    [native code]\n}"
        },
        "default" : {
            "code" : "function now() {\n    [native code]\n}"
        }
    },
    "updatedAt" : {
        "type" : {
            "code" : "function Date() {\n    [native code]\n}"
        },
        "default" : {
            "code" : "function now() {\n    [native code]\n}"
        }
    }
}

Я не понимаю, почему все должно быть в нижнем регистре.Или я что-то упустил?

1 Ответ

0 голосов
/ 25 февраля 2019

Нет, это не сбой при декодировании полей верблюжьего дела.Не удается проанализировать структурные теги.

Согласно doc :

По соглашению строки тегов представляют собой конкатенацию необязательно разделенного пробелом ключа: "значение"пары.Каждый ключ является непустой строкой, состоящей из неуправляемых символов, кроме пробела (U + 0020 ''), кавычки (U + 0022 '"') и двоеточия (U + 003A ':'). Каждое значение заключено в кавычкииспользуя символы "+" U + 0022 и буквенный синтаксис строки Go.

Вы должны удалить пробел после json: и bson:.

...