我有以下代碼,使用 go.mongodb.org/mongo-driver 庫:
updateMap := bson.M{
"$set": bson.M{
"dateAdded": primitive.NewDateTimeFromTime(time.Now()),
},
}
if len(alias) > 0 {
// I don't see how this type assertion is necessary
updateMap["$set"].(map[string]interface{})["alias"] = alias
}
如果我做:
updateMap["$addFields"].(map[string]map[string]string)["alias"] = alias
它不編譯。編譯器已經知道 updateMap 是 bson.M 型別,它是一個map[string]interface{}. 斷言它真的map[string]interface{}對編譯器有用嗎?我以為它會想知道它實際上是什么樣的界面,但顯然它不希望我這樣做。
這里發生了什么?
編輯:當然,應該注意的是,這里沒有型別斷言,它不會編譯:
無效操作:無法索引 updateMap["$addFields"](介面型別的地圖索引運算式{})
uj5u.com熱心網友回復:
bson.M被定義為 的別名primitive.M,它被定義為type M map[string]interface{}(即非別名型別)。問題在于它updateMap["$set"]是 a bson.M,與 相比,它是一個不同的型別map[string]interface{}。因此,您的型別斷言必須bson.M改為,例如:
updateMap["$set"].(bson.M)["alias"] = alias
Go 游樂場中的可運行示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493496.html
