2017-03-06 27 views
0

我目前接收蒙戈聚集查詢從一個有效載荷:轉換地圖[字符串]接口{}爲有效蒙戈查詢

[ 
    { 
    "$match": { 
     "isComplete": true 
     "accountId": "foo123" 
     "startTime": "2017-03-06T23:07:21.262Z" 
     "$or": [ { userId: "bar123" }, { userId: "bar235" } ] 
    } 
    }, 
    { 
    "$group": { 
     "_id": null, 
     "count": { 
     "$sum": 1 
     } 
    } 
    } 
] 

這是正在存儲爲map[string]interface{}。問題是$match子句可以是任意的查詢,這意味着它可以包含ObjectIds和Dates。我試過手動將ID轉換爲bson.ObejectId和任何日期time.Times,但查詢可能會變得非常複雜。

有誰知道從有效載荷中取出任意mongo查詢並轉換它的任何好方法嗎?

回答

0

看來你需要解組到[]map[string]interface{}與該文章中的數組結構。

有了這樣說,你可以做這樣的事情(與當期的map[string]interface{}類型。

type Payload struct { 
    Message map[string]interface{} `json:"message"` 
} 

// If you are using it as a http HandleFunc 
func (s *Server) ProcessPayload() { 
    PayloadHandler := func(w http.ResponseWriter, r *http.Request) { 
     incoming := r.FormValue("message") 
     if incoming != "" { 
      var payload = new(Payload) 
      json.Unmarshal([]byte(incoming), payload) 

      go payload.FromPayload() 
     } 
    } 

    http.HandleFunc("/payload", PayloadHandler) 
} 

func (p *Payload) FromPayload() { 
    match, ok := p.Message["$match"] 
    if !ok { 
     return 
    } 
    // Do your work on the $match object 
} 
+0

我不得不更多地瞭解處理'$匹配的動態結構,當你面臨的問題對象。 –