嗨我得到了一种复杂的聚合查询,我必须用mgo编写,但是当我中途处理时我真的很茫然:-(,有更好的方法吗?
这是我测试过的控制台查询聚合命令,它可以正常工作。
db.event.aggregate([{$match:{clktime:{$gt:1425289561}}},{$group:{"_id":{$subtract:["$clktime",{$mod:["$clktime", 60*5]}]}, count:{$sum:1}}}])
这是我到目前为止所得到的:
c.Pipe([]bson.M{bson.M{"$match": bson.M{"clktime": bson.M{"$gt": 1425289561}}}, bson.M{"$group": bson.M{"_id": bson.M{"$subtract": []bson.M{bson.M{"$clktime"}, bson.M{"$mod": []bson.M{bson.M{"$clktime"}, bson.M{60 * 5}}}}}}, "count": bson.M{"$sum": 1}}})
它说地图文字中有一个缺失的键,但我无法找到。
我认为人类不应该这样,我非常绝望T_T。
有没有更好或人性化的方法呢?
答案 0 :(得分:0)
是的,还有更好的方法。将代码分成多行,并在地图或数组中的最后一个元素后使用逗号。然后代码将自动格式化,您还将获得指示行的可读错误消息。
package main
type M map[string]M
var x = M{
"a": M{
"b": M{},
"c": M{},
},
}
顺便说一下。请看这个部分bson.M{"$clktime"}, bson.M{60 * 5}}
。
答案 1 :(得分:0)
x := []bson.M{{"$match": bson.M{"clktime": bson.M{"gt": 1425289561}}},{"$group": bson.M{"_id": bson.M{"$subtract": []interface{}{"$clktime", bson.M{"$mod": []interface{}{"$clktime", 60 * 5}}}}, "count": bson.M{"$sum": 1}}}}
答案 2 :(得分:0)
最后,我已经写出来了,但@Grzegorz给出的建议(为方便起见将建筑物或查询拆分为多行)并且还考虑了@ Morty的意见(使用[]interface{}
时的意见在查询命令中来到数组)。以下是我的工作:
q := []bson.M{
bson.M{
"$match": bson.M{
"clktime": bson.M{
"$gt": 1425289561,
},
},
},
bson.M{
"$group": bson.M{
"_id": bson.M{
"$subtract": []interface{}{
"$clktime",
bson.M{
"$mod": []interface{}{
"$clktime",
60 * 5,
},
},
},
},
"count": bson.M{"$sum": 1},
},
},
}
希望对其他人提出类似的问题会有所帮助。