9

コレクションから一意の ID を持つドキュメントを取得しようとしました。

名前、年齢、都市、ランクのフィールドを持つコレクションがあります。golang を使用して mongodb から「city」の結果を取得したいと考えています。

私の構造体コード

type exp struct {
    name string `bson:"name"`
    age  int    `bson:"age"`
    city string `bson:"city"`
    rank int    `bson:"rank"`
}

次のコードを使用して、mongodb から結果を取得します。

var result []exp //my struct type

err = coll.Find(bson.M{"City":bson.M{}}).Distinct("City",&result)

fmt.Println(result)

このコードでは、結果として空の配列が得られます。すべての都市を取得するにはどうすればよいですか?

4

2 に答える 2

8

このコードを試してください

 var result []string 

 err = c.Find(nil).Distinct("city", &result)

 if err != nil {
     log.Fatal(err) 
 }

 fmt.Println(result)
于 2014-10-31T10:12:18.170 に答える
1

リフレクションの制限により、mgoencoding/jsonおよび他の同様のパッケージと同様に)エクスポートされていないフィールドを使用してデータをマーシャリングまたはアンマーシャリングすることはできません。あなたがする必要があるのは、最初の文字を大文字にしてフィールドをエクスポートすることです:

type exp struct {
    Name string `bson:"name"`
    Age  int    `bson:"age"`
    City string `bson:"city"`
    Rank int    `bson:"rank"`
}

補足: 希望する名前が小文字のフィールド名と同じ場合、bson タグを指定する必要はありません。状態のドキュメントbson:

小文字のフィールド名は、エクスポートされた各フィールドのキーとして使用されますが、この動作はそれぞれのフィールド タグを使用して変更できます。

編集:

空の構造体フィールドを持つスライスではなく、空のスライスを取得したことに気付きました。私の回答は質問に対する実際の回答ではありませんが、それでも検討する必要がある問題です。

于 2014-10-31T10:04:06.507 に答える