Golang'daki mongodb'den veri çekmenin doğru yolu

0

Soru

Mongodb'de bu formatta bir belgem var,

{
  field1: string,
  field2: float64,
  field3: {...float64}
}

Sonuçta her zaman field1 & field2 almak ve field3 nesnesinden seçim yapmak/seçmek istiyorum.

Bunu yapmak için, verileri böyle bir yapıya dönüştürüyorum,

type MongoScore struct {
    field1          string              `json:"field1"`
    field2          float64             `json:"field2"`
    field3          map[string]float64  `json:"field3"`
}

Merak ettiğim kısım, bu verileri farklı türlerle çekmek için daha verimli bir yaklaşım olup olmadığıdır.

go mongodb
2021-11-23 22:29:06
1

En iyi cevabı

1

Aşağıdaki veri yapısına sahip olduğunuzu varsayarsak:

type Product struct {
    ID          primitive.ObjectID `bson:"_id"`
    Title       string             `bson:"product"`
    Description string             `bson:"description"`

    count int64 // <- this is not exported, so data won't be filled
}

Golang'da, Yalnızca dışa aktarılan alanlara veya yöntemlere paketinin dışından erişilebilir.

Mongodb'ye verileri koleksiyondan doğrudan eşleşen alanlara yüklemesini söylemek için yapı alanı etiketlerini kullanın. İşte mongodb eşleşiyor bson koleksiyondaki alanları etiketleyin.

func main() {
    ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)

    client, err = mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017/"))
    if err != nil {
        log.Fatalf("can't connect to database: %v\n", err)
    }
    
    objID, _ := primitive.ObjectIDFromHex("619dd79acad38082f9ce16af")
    
    db := client.Database("db")
    col := db.Collection("products")
    
    filter := bson.D{
        {"_id", objID},
    }
    
    dest := &Project{}
    
    err := col.FindOne(ctx, filter).Decode(dest)
    if err != nil {
        log.Fatalln(err)
    }

Yöntem Decode Unmarshals içine veri bulundu dest.

2021-11-24 06:10:53

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................