我在 golang 上使用官方 mongo 驅動程式并嘗試聚合。我想根據貨幣和工資的乘積對條目進行排序。
import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main () {
//...
aggregatePipeline := bson.A{}
aggregatePipeline = append(aggregatePipeline, bson.D{{Key: "$addFields", Value: bson.D{{Key: "trueSalary", Value: bson.D{{"$multiply", bson.A{"salary", "currency"}}}}}}})
aggregatePipeline = append(aggregatePipeline, bson.D{{"$sort", bson.D{{"trueSalary", -1}}}})
cursor , _ := myCollection.Aggregate(context.TODO(), aggregatePipeline)
// cursor returns nil.
}
但是游標回傳零。
我的 mongo 物體都將“薪水”和“貨幣”作為整數。
uj5u.com熱心網友回復:
在 Go 中,您應該始終檢查回傳的錯誤。那會為你節省很多時間。
cursor, err := myCollection.Aggregate(context.TODO(), aggregatePipeline)
if err != nil {
panic(err)
}
這將輸出如下內容:
恐慌:(TypeMismatch)未能優化管道::由:: $multiply只支持數字型別,不支持字串
該$multiply操作嘗試將salary和currency 字串相乘。顯然這不是你想要的,你想將salary和currency屬性的值相乘,所以$給它們加一個符號:
aggregatePipeline = append(aggregatePipeline, bson.D{{
Key: "$addFields",
Value: bson.D{{
Key: "trueSalary",
Value: bson.D{{"$multiply", bson.A{"$salary", "$currency"}}},
}},
}})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357798.html
