10

次の問題があります。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 パッケージを使用することはオプションではありません。

これまでのところ、構造をマップに変換するために次の関数を試しました。リフレクション パッケージを使用しており、それを使用する初心者です。パッケージがよくわかりません。

何かアイデアを出していただければ幸いです。ありがとう。

4

2 に答える 2

26

1. -> -> -> ->
2.部分を演算子 で更新:client jsonstructxmlmapdatabase
$set

collection.Update(bson.M{"_id": id}, bson.M{"$set": bson.M{"name": "new Name"}})

詳細: http://docs.mongodb.org/manual/reference/operator/update/set/
3. 更新するドキュメントをロードし、tmp 変数に保存します。ユーザー入力を別の変数に解析します。更新する前に保持する必要がある値を上書きします。

于 2014-05-10T16:43:30.260 に答える