MongoDB при извлечении всех документов в коллекции дает пустой фрагмент структур с использованием mgo - PullRequest
0 голосов
/ 07 марта 2019

Я вставил данные в mongodb следующим образом

  {
     "_id" : ObjectId("5c80e9cc3bf127cfc80ba5dc"),
     "resp" : [
         {
             "name" : "by",
             "gender" : "synced",
             "age" : "response",
             "hobby" : "submitted",
             "mobile" : "revision"
         },
        {
            "name" : "byoooooo",
            "gender" : "sytewed",
            "age" : "se",
            "hobby" : "subed",
            "mobile" : "revissaaon"
        }
    ]
  }

Используя этот метод

func (d *CollectDAO) Insert(responses []*models.FormData) error {
  resp := models.Responses{
      Data: responses,
  }
  err := db.C(formsCollection).Insert(resp)
  return err
}

Это структура, используемая в методе вставки

type FormData struct {
  Name     string `csv:"name" json:"name" bson:"name"`
  Gender   string `csv:"gender" json:"gender" bson:"gender"`
  Age      string `csv:"age" json:"age" bson:"age"`
  Hobby    string `csv:"hobby" json:"hobby" bson:"hobby"`
  MobileNo string `csv:"mobile" json:"mobile" bson:"mobile"`
}

Обработчик читает образцы данных CSV из файла. Это данные CSV

name,gender,age,hobby,mobile
by,synced,response,submitted,revision
byoooooo,sytewed,se,subed,revissaaon

А затем вставляет это в монго

При запросе всех документов моей коллекции я получаю пустой ответ

func (d *CollectDAO) FindAll() (models.Responses, error) {
    var responses []models.Responses
    err := db.C(formsCollection).Find(nil).All(&responses)
    if err != nil {
        log.Fatal(err)
    }

    log.Printf("all docs %v\n", responses)

    return responses, err
}

Когда я пытаюсь записать значение структуры, я получаю пустую структуру. Это структура ответов, которую я использую в конце, чтобы вставить часть ответа.

type Responses struct {
  Data []*FormData `json:"response"`
}

Что я делаю не так? Мне просто нужно реализовать обработчик, который будет возвращать все данные в коллекции в виде структуры.

На стороне клиента я получаю эту ошибку

unexpected end of JSON input
{ObjectIdHex("") []}

1 Ответ

2 голосов
/ 07 марта 2019

Пакет mgo использует тег bson для сопоставления структурных полей с полями документа в MongoDB.

Таким образом, ваш тип Responses должен выглядеть примерно так:

type Responses struct {
    Data []*FormData `json:"response" bson:"resp"`
}

Обратите внимание, что вы должны сохранять документы с этой структурой (с тегом bson), чтобы иметь возможность извлекать результаты в значения этого типа.

...