1

I´m trying to get a list of blog entries a certain user has authored but my query only returns the first entry created.

This is my User model

 type User struct {
  Id  bson.ObjectId `bson:"_id,omitempty" json:"id"`
  Name string `json:"name"`
}

and my BlogEntry model

type BlogEntry struct {
  Id  bson.ObjectId  `bson:"_id,omitempty" json:"id"`
  UserId bson.ObjectId `json:"user_id"`
  Title string `json:"title"`
}

And this is my query for fetching all blog entries for a certain user

  iter := service.Collection.Find(bson.M{"user_id": bson.ObjectIdHex(id)}).Iter()

Problem is, this only results in the FIRST entry for the user with the passed id.

I´ve checked the data and it seems correct, all the entries have a correct user_id field and so on.

Any ideas why I only get the first entry?

EDIT:

Complete implementation of my function that queries the entries.

func (service *BlogEntryService) GetEntryByUserId(id string) []models.BlogEntry {

      var entries []models.BlogEntry
      iter := service.Collection.Find(bson.M{"user_id": bson.ObjectIdHex(id)}).Iter()
      result := models.BlogEntry{}
        for iter.Next(&result) {
            entries = append(entries, result)
        }
      return entries
    }
3
  • @XyMcXface Of course, updated the post. Commented Jul 5, 2016 at 20:02
  • @XyMcXface Thans for the suggestion, unfortunately the result was the same, only one of the entries was returned. Commented Jul 5, 2016 at 20:29
  • @XyMcXface It seems to something wrong the the actual query (or the stored data), if run the query on some other property than "event_id" it works as expected. Commented Jul 5, 2016 at 20:33

1 Answer 1

3

Alright, I figured it out, probably a beginner mistake.

I still don't know why it returned the first object, that´s still a bit weird.

But my mistake was not adding the "user_id" field as bson on the model. So this:

type BlogEntry struct {
  Id  bson.ObjectId  `bson:"_id,omitempty" json:"id"`
  UserId bson.ObjectId `json:"user_id"`
  Title string `json:"title"`
}

should have been:

 type BlogEntry struct {
      Id  bson.ObjectId  `bson:"_id,omitempty" json:"id"`
      UserId bson.ObjectId `bson:"user_id" json:"user_id"`
      Title string `json:"title"`
    }

Now it works as expected!

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.