[英]How to translate this SQL to MongoDB (GoLang)
我有這個 SQL 查詢:
SELECT SUM(TIME_TO_SEC(TIMEDIFF(IFNULL(userpresences.datefinished, NOW()), userpresences.dateadded))) FROM userpresences WHERE clientid = 12 GROUP BY userpresences.presenceid
有沒有辦法可以將其轉換為 MongoDB 查詢? 我在使用 Aggregate 和 group 參數時遇到問題。
這是 Go 代碼:
groupStage := bson.D{
{"$group", bson.D{
{"_id", "$presenceid"},
{"count", bson.M{"$sum": "$datefinished"}},
}},
}
此count
應從 MySQL 返回 SUM(...)..
我設法以某種方式弄清楚了。
這是完整的代碼,以防其他人可能需要它:
currentTime := time.Now()
matchStage := bson.D{
{"$match", bson.D{
{"clientid", clientID},
}},
}
ifNullDateFinished := bson.M{"$ifNull": []interface{}{"$datefinished", currentTime}}
dateFinishedToSec := bson.M{"$add": []bson.M{
{"$second": ifNullDateFinished},
{"$multiply": []interface{}{bson.M{"$minute": ifNullDateFinished}, 60}},
{"$multiply": []interface{}{bson.M{"$hour": ifNullDateFinished}, 3600}},
}}
dateAddedToSec := bson.M{"$add": []bson.M{
{"$second": "$dateadded"},
{"$multiply": []interface{}{bson.M{"$minute": "$dateadded"}, 60}},
{"$multiply": []interface{}{bson.M{"$hour": "$dateadded"}, 3600}},
}}
groupStage := bson.D{
{"$group", bson.D{
{"_id", "$presenceid"},
{"count", bson.M{"$sum": bson.M{"$subtract": []interface{}{dateFinishedToSec, dateAddedToSec}}}},
}},
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.