2016-07-05 3 views
1

特定のユーザーが作成したブログエントリのリストを取得しようとしていますが、作成された最初のエントリのみが返されます。Golang mgoクエリはクエリの最初のオブジェクトのみを返します

これは私のUserモデル

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

と私のBlogEntryモデル

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

であり、これは

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

問題がある特定のユーザーのすべてのブログエントリを取得するための私のクエリですこれにより、渡されたIDを持つユーザーのFIRSTエントリのみが生成されます。

データをチェックしたところ、正しいと思われます。すべてのエントリに正しいuser_idフィールドがあります。

なぜ私は最初のエントリを取得する任意のアイデア?

EDIT:

エントリを照会するmy関数の完全な実装。

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 
    } 
+0

エントリを反復処理するために使用するコードを表示します。 –

+0

@XyMcXfaceもちろん、投稿を更新しました。 – marsrover

+1

ループの後にiter.Close()を呼び出し、返されたエラーがあれば報告します。また、これを 'err:= service.Collection.Find(bson.M {" user_id ":bson.ObjectIdHex(id)}).Iter()。All(&entries)'と書くことができます。 –

答えて

2

申し訳ありませんが、おそらく初心者の間違いです。

まだ最初のオブジェクトが返された理由はまだ分かりませんが、まだ少し奇妙です。

私の間違いはモデルのbsonとして "user_id"フィールドを追加していないことでした。 ので、この:

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

がされている必要があります:予想通り

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

は、今では動作します!

関連する問題