2017-05-02 4 views
0

だから私は下の構造体のためのマルチレベルのプッシュをしたい:mgoで配列要素のマルチレベルプッシュを行う方法は?

//push a new node in date array 
query := bson.M{"branch":"400612", "unique_id":c.Unique_Id} 
update := bson.M{"$push": bson.M{"date": bson.M{"event_timestamp": t, "event": []models.Event{ 
     { 
      Event:models.INSPECTION, 
      Event_Id:"123456789", 
      Status:models.PENDING, 
     }, 

}}}} 

err = look_up.Update(query, update) 
if err != nil { 
    panic(err) 
} 

//push the data in the nested event 
pushQuery := bson.M{"date.event": bson.M{"event": []models.Event{ 
    { 
     Event_Name:models.INSPECTION, 
     Event_Id:"4984984198", 
     Status:models.PENDING, 
    }, 
}}} 

err = look_up.Update(bson.M{"unique_id": "2549090", "date.event_timestamp":"08-05-2017"}, bson.M{"$push": pushQuery}) 
if err != nil { 
    //panic(err) 
    fmt.Print("error_2",err) 
} 

type Inspector_Pool struct{ 
    Unique_Id string `json:"unique_id" form:"unique_id" query:"unique_id"` 
    Email string `json:"email" form:"email" query:"email"` 
    Branch []string `json:"branch" query:"branch"` 
    Date []Date `json:"date" query:"date"` 
} 

type Date struct { 
    Event_Timestamp string `json:"event_timestamp" query:"event_timestamp"` 
    Event []Event `json:"event" query:"event"` 
} 

type Event struct { 
    Event_Name string `json:"event_name" form:"event_name" query:"event_name"` 
    Event_Id string `json:"event_id" form:"event_id" query:"event_id"` 
    Status string `json:"status" query:"status"` 
} 

だから、私は何をしたいが、私は以下のコードを達成するために持っているので、どのようなイベント配列内のデータをプッシュすることですイベントオブジェクトではなく、日付オブジェクトに新しいエントリを作成してスナップショットを作成しますenter image description here

+0

スクリーンショットの代わりに、実際のコードを投稿してください。 – chridam

+0

@chridamがコードを更新しました。ありがとうございました。 – fayeed

答えて

1

$ positional演算子を使用して更新することができます。基本的には、配列内の要素の位置を明示的に指定せずに更新する配列内の要素を識別します。

は、以下のようにあなたの第2のプッシュ文を変更します

pushQuery := bson.M{"date.$.event": Event{  
     Event_Name:"foobar", 
     Event_Id:"4984984198", 
}} 
err = collection.Update(bson.M{"unique_id":"2549090", 
           "date.event_timestamp":"08-05-2017"}, 
         bson.M{"$push": pushQuery}) 

上記EVENT_TIMESTAMP '08 -05-2017' すなわち

{"_id": ObjectId("5909287934cb838fe8f89b6e"), 
    "unique_id": "2549090", 
    "date": [ 
    { 
     "event_timestamp": "08-05-2017", 
     "event": [ 
     { 
      "event_name": "baz", 
      "event_id": "123456789" 
     }, 
     { 
      "event_name": "foobar", 
      "event_id": "4984984198" 
     } 
     ] 
    } 
    ]} 

に一致する同じ日付配列にイベント 'foobarに' をプッシュします一般的に配列の配列を有するは、後でデータのクエリ/抽出を困難/複雑にする。アプリケーションのユースケースによっては、document Data Modelを再検討することもおすすめします。

関連する問題