2015-03-02 85 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}, 
     }, 
    }, 
} 

希望這將有助於其他人得出了類似的問題。

相關問題