我目前正在从有效负载接收mongo聚合查询:
[
{
"$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
s,将任意日期转换为time.Times
但查询可能会变得非常复杂。
有没有人知道从有效载荷中获取任意mongo查询并转换它的任何好方法?
答案 0 :(得分: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
}