我有一條SQL語句,我試圖在使用MongoDB數據庫的golang中重新創建。我試圖重新聲明如下:golang mongodb中的Transact-SQL等效集合
select date,
sum(case when field1 = "true" then 1 else 0) trueField1,
sum(case when field1 = "false" then 1 else 0) falseField1,
sum(case when field2 = "true" then 1 else 0) trueField2,
sum(case when field2 = "false" then 1 else 0) falseField2
from myTable
group by date
我需要總出幾個組合在給定日期和傾倒出來,但我不能確定如何通過golang/MongoDB的完成它。
編輯:這裏是我每過最後一次請求的起點。從o1中可以看出,它顯示了我在第一個總和/次數後要做什麼。我還想總結另一個字段是送出並在相同的日期將它們相加,並返回同一天的計數。我可以得到一些關於我如何完成這項任務的方向?
o1 := bson.M{
"$match" : bson.M {
"retailer" : clientId,
"isComplete" : true,
"pkgStatus.finalized" : true,
},
}
o2 := bson.M {
"$project" : bson.M {
"_id" : 1,
"createdAt" : 1,
},
}
o3 := bson.M{
"$group": bson.M{
"_id" : bson.M{ "$dayOfYear": "$createdAt" },
"total" : bson.M{ "$sum" : 1},
"first" : bson.M{ "$min" : "$createdAt" },
},
}
o4 := bson.M {
"$sort" : bson.M { "_id" : 1 },
}
totalMessages := []bson.M{msgsStarted, o2, o3, o4}
operations := []bson.M{o1, o2, o3, o4}
pipe := cMessages.Pipe(operations)
results := []bson.M{}
err := pipe.All(&results)
if err != nil {
fmt.Printf("Error: %s\n", err)
return
}
for _, resultRec := range results {
myDate := fmt.Sprintf("%s", resultRec["first"])
fmt.Printf("%s, %d\n", myDate[0:10], resultRec["total"])
}
EDIT2
Schema定義
messages {
"_id" : {
"$oid" : bson.ObjectId
},
"isComplete" : bool,
"status" : {
"cancelled" : bool,
"finalized" : bool,
"delivered" : bool
},
"createdDate" : {
"$date" : ISODate
}
我試圖把你之前提供指導$ COND報表和嵌套其與$和命令,使我可以做到以下幾點:
sum(case when isComplete = true and status.finalized = true then 1 else 0)
我b een玩以下內容:
tf1c := bson.M{"$cond": []interface{}{bson.M{"$eq": []interface{}{"iscomplete", true}}, 1, 0}}
但不確定的語法。我相信它應該遵循這樣的事情,但不會再知道如何它到底(下面是從另一個計算器線程)翻譯
"$cond": [{
"$and": [{
"$eq": ["isComplete", true]
}, {
"$eq": ["pkgStatus.finalized", true]
}]
}, 1, 0]
感謝您的指導!
解纏地圖
你如何解開地圖?
map[_id:map[date:2014-12-25 retailer:ObjectIdHex("548a9de8a4ea9d690f6df8e4")]]
檢索值。我試過以下,但它返回null。
fmt.Printf("%s\n", resultRec["_id.date"])
有你甚至試圖讀取[MongoDB的聚合框架文件(HTTPS: //docs.mongodb.com/manual/aggregation/)在提問之前?順便說一句,NoSQL並不意味着我們不需要關於文檔結構的信息。 –
是的,我確實閱讀了文檔,但仍然遇到問題,因此我發佈了該問題。這應該是我們在遇到問題時得到幫助的地方。 – CRob
我在這裏看不到問題。問題是當你試圖做某件事情時,你的嘗試結果不起作用。問題是,當你不明白事情是如何工作的,而這件事情沒有記錄。就你而言,我所看到的只是爲你免費爲你做一些工作的請求,而不需要你方的任何努力來自己解決。當然,除了寫這篇文章外。向我們展示您嘗試過的查詢/代碼,我們會看到它有什麼問題。 –