是否有更好的方法来解析mongodb查询?

时间:2015-03-02 14:43:01

标签: go mgo

嗨我得到了一种复杂的聚合查询,我必须用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。

有没有更好或人性化的方法呢?

3 个答案:

答案 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},
        },
    },
}

希望对其他人提出类似的问题会有所帮助。