Я использую MongoDb Go Driver и не могу получить подзначение ObjectId из JSON, декодированного в моих структурах.
Примечание: Я использую библиотеку / API, отличную от этого вопроса , поэтому, пожалуйста, не отмечайте это как дубликат.
import (
"net/http"
"github.com/go-chi/chi"
"encoding/json"
"time"
"context"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"fmt"
)
У меня есть тип структуры, подобной этой, для обработки результатов
type Contact struct {
Id struct {
ObjId string `json:"$oid"`
} `json:"_id"`
Name string `json:"name"`
Email string `json:"email"`
Health struct {
Weight int `json:"weight"`
Height int `json:"height"`
} `json:"health"`
}
А потом я иду, чтобы получить контакты следующим образом:
var contacts []Contact
ctx, _ := context.WithTimeout(context.Background(), 30*time.Second)
cursor, err := collection.Find(ctx, bson.M{})
if err != nil {
panic(err)
}
defer cursor.Close(ctx)
for cursor.Next(ctx) {
var contact Contact
fmt.Println(cursor)
cursor.Decode(&contact)
contacts = append(contacts, contact)
}
if err := cursor.Err(); err != nil {
panic(err)
}
// I want to do more with the contacts, but .Id is empty :-(
fmt.Println(contacts)
Подполя для "health"
появляются точно так, как они должны, но по какой-то причине подполе из "_id"
части результатов нигде не найдено. Может кто-нибудь помочь мне с этим ??
Ответ JSON из базы данных выглядит следующим образом, и по какой-то причине я могу получить подполя для поля health
, но не для поля _id
.Почему бы и нет?
Необработанный JSON-ответ БД
[{
"_id": {
"$obj": "5c601648ae25e40e2631c3ef"
},
"name": "Bob Smith",
"email": "bob@smith.com",
"health": {
"height": 192,
"weight": 85
}
}]
fmt.Println
на выходе декодированного массива contacts
:
[{{} Bob Smith bob@smith.com {192 85}}]