次の問題があります。structure
データベースで更新を実行するには、aをに変換する必要がありmap[string]interface{}
ます (mgo を mongodb のドライバーとして使用)。
アップデート
mongoDB でドキュメントを部分的に更新する場合、(最適な) 解決策は、マップに変換して不要なフィールドを削除することです。構造体からマップへの変換については、私の他の投稿を参照してください
元の投稿
クライアント側の JavaScript からデータを受け取り、my struct モデルに書き込みます。しかし、一部のフィールドを変更/更新したくないため、構造を に変換しmap[string]interface{}
て不要なフィールドを削除する必要があります。
構造をjsonに変換してからマップするのは、フィールドの型が保持されていないため、うまくいきません。たとえば、次の構造を としますImage model
。
type Image struct {
Name string `json:name`
Views int `json:views,string`
Owner string `json:owner`
}
ここまでは順調ですが、クライアント (つまり JavaScript) から情報を受け取ると、ビュー フィールドは文字列になります。クライアントから与えられた json 入力をマップに変換すると、ビュー フィールドは文字列のままになり、この値の内部表現がデータベースで変更されます。次にデータベースからこの画像を読み取ると、Views フィールドはゼロになります (データベースからの文字列表現のため)。
したがって、クライアントからの json 入力を構造体に書き込みます (Views 変数を適切に変換するため)。ただし、所有者の値は変更しないでください (1 つのフォーム データベース)。そのため、構造を map[string]interface{} に再度変換し、データベースを更新する前にそのマップを処理する必要があります。
Views フィールドの文字列タグが int から文字列に変換されるため (マップに変換する場合)、これに json パッケージを使用することはオプションではありません。
これまでのところ、構造をマップに変換するために次の関数を試しました。リフレクション パッケージを使用しており、それを使用する初心者です。パッケージがよくわかりません。
何かアイデアを出していただければ幸いです。ありがとう。