Получение запрашиваемых элементов из объекта в Mongodb golang - PullRequest
0 голосов
/ 08 мая 2020

Документы в коллекции выглядят следующим образом:

    {
     "id":"81f003b9-da3a-4480-9963-c9c8e01027af"
     "name": "name",
     "born": "birth date",
     "birthplace": "place"
    }

Я хочу получить из документа только элементы id и name. Мой код go:

 type Player struct {
    Id                   string       `json:"id"`
    PlayerName           string       `json:"name"`
    Born                 string       `json:"born, omitempty"`
    BirthPlace           string       `json:"birthplace, omitempty"`
}


func GetIDName(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")

var players []Player

opts := options.Find().SetProjection(bson.D{{"id", 1}, {"name", 1}})
cur, err := collection.Find(context.TODO(), bson.M{"status": 1}, opts)

if err != nil {
    fmt.Fprintf(w, string("Invalid request payload"))
    respondWithError(w, http.StatusBadRequest, "Invalid request payload")
    return
}
defer r.Body.Close()

defer cur.Close(context.TODO())

for cur.Next(context.TODO()) {

    var player Player

    err := cur.Decode(&player)
    if err != nil {
        log.Fatal(err)
    }

    players = append(players, player)
 }

 if err != nil {
    return
 } 
  respondWithJSON(w, http.StatusOK, players)
}

Ожидаемый результат был

{
  {
     "id":"81f003b9-da3a-4480-9963-c9c8e01027af",
     "name": "name"
  },
  {
     "id":"81787162976217t895789127",
     "name": "the other name"
  }
}

Однако результат, который я получаю, будет:

 {
  {
     "id":"81f003b9-da3a-4480-9963-c9c8e01027af",
     "name": "",
      "born": "",
      "birthplace": ""
  },
  {
     "id":"81787162976217t895789127",
     "name": "",
     "born": "",
     "birthplace": ""
  }
}

Как вы можете видите, из запроса выше я не могу получить name , и другие поля также выводятся со значениями nil. Было бы очень полезно, если бы вы сказали мне, что я делаю не так. Спасибо!

1 Ответ

0 голосов
/ 08 мая 2020

Чтобы ограничить проблему, сначала убедитесь, что вы получаете правильную информацию из базы данных. Значит, вы правильно расшифровываете. Наконец, вывод JSON пропускает пустые поля.

Для этой цели рекомендуется использовать log.Printf ().

...