Home  >  Article  >  Backend Development  >  Get all data from mongodb composite collection using filter in golang

Get all data from mongodb composite collection using filter in golang

WBOY
WBOYforward
2024-02-06 10:36:13643browse

Get all data from mongodb composite collection using filter in golang

Question content

I try to get all the data using the name field that I specified in the api request body. I've created a filter for the .find() function. But I can't get any results (response body shows null, no error at all). You can see my model file and the rest of the code at the bottom.

Controller:

func get_formbypatientfullname(ctx *gin.context) {
   col := mongodb.client.database(config.database_name).collection("consentforms")
   filter := bson.m{"patient": bson.m{"name": ctx.query("name")}}

   cursor, err := col.find(_context.todo(), filter)
   if err != nil {
      log.fatal(err)
   }

   var results []general_models.consentform
   if err = cursor.all(_context.todo(), &results); err != nil {
      log.fatal(err)
   }
   for _, result := range results {
      res, _ := json.marshal(result)
      fmt.println(string(res))
   }
   ctx.indentedjson(http.statusok, gin.h{"data": results})
}

Model file:

type ConsentForm struct {
   ID                 primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
   FormFileURL        string             `json:"FormFileURL" bson:"FormFileURL"`
   ProcessName        string             `json:"ProcessName" bson:"ProcessName"`
   DateOfNotification string             `json:"DateOfNotification" bson:"DateOfNotification"`
   WitnessName        string             `json:"WitnessName" bson:"WitnessName"`
   WitnessSurname     string             `json:"WitnessSurname" bson:"WitnessSurname"`
   ResponsibleDoctor  string             `json:"ResponsibleDoctor" bson:"ResponsibleDoctor"`
   Patient            IPatient           `json:"Patient" bson:"Patient"`
   QuestionOptions    IQuestionOptions   `json:"QuestionOptions" bson:"QuestionOptions"`
   AdditionalDetails  string             `json:"AdditionalDetails" bson:"AdditionalDetails"`
}

type IPatient struct {
   // ID                primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
   Name              string `json:"Name" bson:"Name"`
   Surname           string `json:"Surname" bson:"Surname"`
   Birthdate         string `json:"Birthdate" bson:"Birthdate"`
   TCKN              string `json:"TCKN" bson:"TCKN"`
   FacePhotoURL      string `json:"FacePhotoURL" bson:"FacePhotoURL"`
   SignatureImageURL string `json:"SignatureImageURL" bson:"SignatureImageURL"`
}

I try to filter based on username and get all the data of the user. But I think I have a bug in the filter part or the whole code because I can't get any data back. What I get in return is empty.


Correct answer


Your filter will match where patient is an embedded document and has a single name that matches the given value Documentation of the field.

To filter by a field embedded in the document, you must use dot notation:

filter := bson.M{"Patient.Name": ctx.Query("name")}

The above is the detailed content of Get all data from mongodb composite collection using filter in golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete