2016-05-20 2 views
1

$ resourceを使ってHTTPメソッドを使ってGoサーバーにリクエストを送信する、angleJSフロントエンドがあります。私は、PATCHを送信するときに既存のdbエントリを更新したい。 GOサーバーに複数のデータフィールドを提供する必要があります。 angularJSクライアントはどのような形式でデータを送信するのですか? mgo docから私は以下のコードを更新しました。更新フィールドがクライアントから受け取ったデータから解析され、空のフィールドをスキップするGo構造体を取ることは可能ですか?Golang + mgo - dbドキュメントを更新するには?

 change := mgo.Change{ 
      Update: bson.M{"$inc": bson.M{"n": 1}}, 
      Upsert: false, 
      Remove: false, 
      ReturnNew: true, 
     } 
     info, err = col.Find(M{"_id": id}).Apply(change, &doc) 
     fmt.Println(doc.N) 

私のangularjsコードで、私はクエリとしてデータを送信する予定です。

  UpdateOneSchedule.update({bkresources:dbResources}, 
      function(data){ 
       //on success 
      }, 
      function(httpResponse){ 
       //on error 
       if(httpResponse.status === 409){ 
       } 
      }); 

答えて

1

はい、可能です。簡単な例は次のようになります。

var myStruct struct { 
    Name string `json:"name" bson:"name,omitempty"` 
    Age int `json:"age" bson:"age"` 
} 

あなたは体mystructにあなたのデータを解析し、更新するために、その同じオブジェクトを与えます。それはつまり、JSONで動作するよう、それは、それが解析され得ることはありませんたとえば空の場合

change := mgo.Change{ 
    Update: bson.M{"$inc": bson.M{"n": 1}, "$set": bson.M{"name": myStruct.Name}}, 
    Upsert: false, 
    Remove: false, 
    ReturnNew: true, 
} 
info, err = col.Find(M{"_id": id}).Apply(change, &doc) 
fmt.Println(doc.N) 

,omitemptyは、同じように動作します:

myStruct.Name = "" 
myStruct.Age = 23 
col.Insert(myStruct) 

これは、次のBSONドキュメントを作成します。

{ 
    id: ObjectId("573da7dddd73171e42a84045"), 
    age: 23 
} 
+0

$ setと$ incは何を説明できますか?私はそれのためのドキュメントを見つけることができません。 –

+0

'$ inc'はフィールド' n'を1だけインクリメントし、 '$ set'はフィールドの値を設定します。私はちょうどコードの間違いを認識した、私はそれを編集します。関連するドキュメント:https://docs.mongodb.com/manual/reference/operator/update/set/およびhttps://docs.mongodb.com/manual/reference/operator/update/inc/ –

関連する問題