2015-03-02 68 views
1

您好我有一种复杂的聚集查询的,我必须用氧化镁写,但我真是茫然的时候做出来:-(半路上,有没有更好的方法来做到这一点?有没有更好的方法来解析MongoDB查询?

这里是一个控制台。查询aggregate命令,我已经测试和它的作品

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

是的,还有更好的办法。将代码分解成多行,并在映射或数组中的最后一个元素之后使用逗号。然后代码将被自动格式化,并且您还将获得一条可读的错误消息指示行。

package main 

type M map[string]M 

var x = M{ 
    "a": M{ 
     "b": M{}, 
     "c": M{}, 
    }, 
} 

顺便说一下。看这部分bson.M{"$clktime"}, bson.M{60 * 5}}

+0

但是原始命令是'$ mod:[$ clktime,60 * 5]' – armnotstrong 2015-03-03 03:35:21

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}}}} 
+0

你能详细说明这是干什么吗? – 2015-03-02 17:36:42

+0

虽然在这种情况下你写的句子可能不正确,但我发现它在查询命令中使用'[] interface {}'来到阵列'[“$ clktime”,60 * 5]通过,谢谢 – armnotstrong 2015-03-03 04:41:23

0

最后,我写了这一点,但建议@Grzegorz给(其分裂建筑物或查询多行为了方便),也被认为@莫蒂的意见(当来到阵列,其使用[]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}, 
     }, 
    }, 
} 

希望这将有助于其他人得出了类似的问题。

相关问题