2 回答

TA貢獻1786條經驗 獲得超11個贊
此代碼有效。經過幾個小時的嘗試,感謝好運,我設法解決了這個問題。也許有人會解釋這個?
而不是bson.Raw我使用bson.M和result.Decode()而不是result.DecodeBytes() 現在我有與 nodejs 給我相同的輸出。
var docs []bson.M
for result.Next(ctx) {
var document bson.M
err = result.Decode(&document)
if err != nil {
log.Println(err)
}
docs = append(docs, document)
}
return docs

TA貢獻1818條經驗 獲得超7個贊
你也可以使用這個:
var results []bson.M
if err := cursor.All(context.TODO(), &results); err != nil {
log.Panic(err)
}
并查看結果或轉換為 json 使用此:
res, _ := json.Marshal(results)
fmt.Println(string(res))
如果你想自己做,你可以這樣做:
var convertedResult []map[string]interface{}
for _, item := range results {
convertedItem := make(map[string]interface{})
for key, val := range item {
switch v := val.(type) {
case primitive.ObjectID:
convertedItem[key] = v.Hex()
case bson.M:
subMap := make(map[string]interface{})
for subKey, subVal := range v {
subMap[subKey] = subVal
}
convertedItem[key] = subMap
case bson.A:
subArray := make([]interface{}, len(v))
for i, subVal := range v {
subArray[i] = subVal
}
convertedItem[key] = subArray
default:
convertedItem[key] = v
}
}
convertedResult = append(convertedResult, convertedItem)
}
jsonBytes, err := json.Marshal(convertedResult)
if err != nil {
panic(err)
}
jsonString := string(jsonBytes)
fmt.Println(jsonString)
- 2 回答
- 0 關注
- 193 瀏覽
添加回答
舉報