地図にすべてを保存することができます。 mgo/bson
パッケージは、任意のデータを格納するために使用できるbson.M
データ型を提供します.MongoDBは強力なスキーマを強制しないため、mgo
は内部でbson.M
型をすべて内部的に使用します。
データを表示するだけの場合は、bson.M
を使用しても問題ありませんが、一度作業を開始したければ、代わりに構造体の使用を検討する必要があります。それ以外の場合は、プログラムに多くの型アサーションが必要です。たとえば、ドキュメントのタイトル(result["title"]
)を大文字で印刷するとします。ただbson.M
を使用することにより、あなたのコードは次のようになります。
// is there a title attribute?
if title, ok := result["title"]; ok {
// is it a string? (and not another map or integer or something else)
if titleStr, ok := title.(string); ok {
// ok, it is a string
fmt.Println("Title: ", strings.ToUpper(titleStr))
}
}
あなたのプログラムでは、mgo
はあなたのための構造体にデータを変換させたときに維持することがはるかに読みやすく、容易になるだろう。その後、同じコードは、のように読むかもしれない:
fmt.Println(strings.ToUpper(result.Title))
通常、あなたがなど、「ユーザー」のための(すなわち1種類、「ブログ記事」の他、対処したい文書の種類ごとに1つの構造体の型を定義します)にアクセスする可能性のあるすべての属性が含まれています。ユーザー文書に電子メールアドレスが割り当てられていない場合は、デコード時に空の文字列(またはより一般的にはゼロ値)が返されます。
こんにちはグスタボ、あなたの詳細な答えに感謝します。私は、オプションの属性を処理するための "、"インラインのトリックについては知らなかった。 mgoは本当に素晴らしいソフトウェアです! – tux21b
Find(nil).All(&m)で行うことはできますか? –